/ Hex Artifact Content
Login

Artifact 61acaf6b951f3c505c7ab2693dd72d4a8a4a488e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 7c 7c 20 28 28 70 2d 3e 72 63 26 30  USY || ((p->rc&0
4770: 78 46 46 29 20 3d 3d 20 53 51 4c 49 54 45 5f 4c  xFF) == SQLITE_L
4780: 4f 43 4b 45 44 29 29 3b 0a 20 20 61 73 73 65 72  OCKED));.  asser
4790: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
47a0: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
47b0: 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53  0 );.  p->rc = S
47c0: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69  QLITE_OK;.  p->i
47d0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
47e0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
47f0: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
4800: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
4810: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
4820: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
4830: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
4840: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
4850: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
4860: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
4870: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
4880: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
4890: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
48a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
48b0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
48c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
48d0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
48e0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
48f0: 73 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67  ssLimit = (unsig
4900: 6e 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ned)p->aCounter[
4910: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
4920: 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20  S_VM_STEP];.    
4930: 69 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d  if( nProgressLim
4940: 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e  it==0 ){.      n
4950: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
4960: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4970: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4980: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4990: 74 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64  t %= (unsigned)d
49a0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  b->nProgressOps;
49b0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
49c0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
49d0: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
49e0: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
49f0: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
4a00: 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d  =0.   && (p->db-
4a10: 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45  >flags & (SQLITE
4a20: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
4a30: 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49  ITE_VdbeEQP|SQLI
4a40: 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d  TE_VdbeTrace))!=
4a50: 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  0.  ){.    int i
4a60: 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d  ;.    int once =
4a70: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
4a80: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
4a90: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4aa0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4ab0: 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20  beListing ){.   
4ac0: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
4ad0: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
4ae0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  \n");.      for(
4af0: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
4b00: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
4b10: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
4b20: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
4b30: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i]);.      }.   
4b40: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4b50: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4b60: 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20  _VdbeEQP ){.    
4b70: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
4b80: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
4b90: 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70     if( aOp[i].op
4ba0: 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
4bb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
4bc0: 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28  ( once ) printf(
4bd0: 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e  "VDBE Query Plan
4be0: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  :\n");.         
4bf0: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
4c00: 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20  aOp[i].p4.z);.  
4c10: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30          once = 0
4c20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
4c30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4c40: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4c50: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
4c60: 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42  e )  printf("VDB
4c70: 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  E Trace:\n");.  
4c80: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
4c90: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
4ca0: 6e 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d  ndif.  for(pc=p-
4cb0: 3e 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  >pc; rc==SQLITE_
4cc0: 4f 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61  OK; pc++){.    a
4cd0: 73 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20  ssert( pc>=0 && 
4ce0: 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20  pc<p->nOp );.   
4cf0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
4d00: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
4d10: 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45  mem;.#ifdef VDBE
4d20: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61  _PROFILE.    sta
4d30: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
4d40: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
4d50: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20   nVmStep++;.    
4d60: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a  pOp = &aOp[pc];.
4d70: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
4d80: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
4d90: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
4da0: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
4db0: 65 63 5b 70 63 5d 2b 2b 3b 0a 23 65 6e 64 69 66  ec[pc]++;.#endif
4dc0: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
4dd0: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
4de0: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
4df0: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
4e00: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4e10: 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
4e20: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
4e30: 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
4e40: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4e50: 74 4f 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20  tOp(stdout, pc, 
4e60: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
4e70: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
4e80: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
4e90: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
4ea0: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
4eb0: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
4ec0: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
4ed0: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
4ee0: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
4ef0: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
4f00: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
4f10: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4f20: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
4f30: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
4f40: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
4f50: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4f60: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
4f70: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
4f80: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f90: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
4fa0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
4fb0: 2f 2a 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65  /* On any opcode
4fc0: 20 77 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d   with the "out2-
4fd0: 70 72 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c  prerelease" tag,
4fe0: 20 66 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a   free any.    **
4ff0: 20 65 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61   external alloca
5000: 74 69 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d  tions out of mem
5010: 5b 70 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d  [p2] and set mem
5020: 5b 70 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a  [p2] to be.    *
5030: 2a 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69  * an undefined i
5040: 6e 74 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73  nteger.  Opcodes
5050: 20 77 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c   will either fil
5060: 6c 20 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72  l in the integer
5070: 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72  .    ** value or
5080: 20 63 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d   convert mem[p2]
5090: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20   to a different 
50a0: 74 79 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  type..    */.   
50b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
50c0: 66 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70  flags==sqlite3Op
50d0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
50e0: 2d 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20  ->opcode] );.   
50f0: 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
5100: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50  s & OPFLG_OUT2_P
5110: 52 45 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  RERELEASE ){.   
5120: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5130: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p2>0 );.      as
5140: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5150: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5160: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75  or) );.      pOu
5170: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
5180: 32 5d 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f  2];.      memAbo
5190: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
51a0: 75 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56  ut);.      if( V
51b0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
51c0: 75 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62  ut) ) sqlite3Vdb
51d0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
51e0: 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  );.      pOut->f
51f0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
5200: 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61      }..    /* Sa
5210: 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e  nity checking on
5220: 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20   other operands 
5230: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5240: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 28  _DEBUG.    if( (
5250: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5260: 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a  PFLG_IN1)!=0 ){.
5270: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5280: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
5290: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
52a0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
52b0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
52c0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
52d0: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
52e0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
52f0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5300: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5310: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
5320: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5330: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5340: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5350: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5360: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5370: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
5380: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5390: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
53a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
53b0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
53c0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
53d0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
53e0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
53f0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p2]) );.      a
5400: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5410: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5420: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5430: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p2]) );.      RE
5440: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5450: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5460: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5470: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5480: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  gs & OPFLG_IN3)!
5490: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
54a0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
54b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
54c0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
54d0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
54e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
54f0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5500: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5510: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5520: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5530: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5540: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5550: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5560: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5570: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p3]);.    }.
5580: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5590: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
55a0: 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T2)!=0 ){.      
55b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
55c0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
55d0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
55e0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
55f0: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5600: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5610: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5620: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5630: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5640: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5650: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5660: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5680: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5690: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
56a0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
56b0: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
56c0: 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
56d0: 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20  .  .    switch( 
56e0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a  pOp->opcode ){..
56f0: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5720: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
5740: 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69  * What follows i
5750: 73 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74  s a massive swit
5760: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65  ch statement whe
5770: 72 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70  re each case imp
5780: 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70  lements a.** sep
5790: 61 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  arate instructio
57a0: 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c  n in the virtual
57b0: 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65   machine.  If we
57c0: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61   follow the usua
57d0: 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e  l.** indentation
57e0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61   conventions, ea
57f0: 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62  ch case should b
5800: 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20  e indented by 6 
5810: 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20  spaces.  But.** 
5820: 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66  that is a lot of
5830: 20 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e   wasted space on
5840: 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e   the left margin
5850: 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77  .  So the code w
5860: 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69  ithin.** the swi
5870: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69  tch statement wi
5880: 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f  ll break with co
5890: 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20  nvention and be 
58a0: 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74  flush-left. Anot
58b0: 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65  her.** big comme
58c0: 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74  nt (similar to t
58d0: 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61  his one) will ma
58e0: 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20  rk the point in 
58f0: 74 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a  the code where.*
5900: 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20  * we transition 
5910: 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69  back to normal i
5920: 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ndentation..**.*
5930: 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  * The formatting
5940: 20 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73   of each case is
5950: 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65   important.  The
5960: 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51   makefile for SQ
5970: 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65  Lite.** generate
5980: 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f  s two C files "o
5990: 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f  pcodes.h" and "o
59a0: 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61  pcodes.c" by sca
59b0: 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69  nning this.** fi
59c0: 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c  le looking for l
59d0: 69 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ines that begin 
59e0: 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e  with "case OP_".
59f0: 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20    The opcodes.h 
5a00: 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65  files.** will be
5a10: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65   filled with #de
5a20: 66 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20  fines that give 
5a30: 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76  unique integer v
5a40: 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a  alues to each.**
5a50: 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20   opcode and the 
5a60: 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69  opcodes.c file i
5a70: 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e  s filled with an
5a80: 20 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67   array of string
5a90: 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20  s where.** each 
5aa0: 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79  string is the sy
5ab0: 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20  mbolic name for 
5ac0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
5ad0: 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68  g opcode.  If th
5ae0: 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d  e.** case statem
5af0: 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  ent is followed 
5b00: 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20  by a comment of 
5b10: 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d  the form "/# sam
5b20: 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20  e as ... #/".** 
5b30: 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20  that comment is 
5b40: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
5b50: 65 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72  e the particular
5b60: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70   value of the op
5b70: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65  code..**.** Othe
5b80: 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68  r keywords in th
5b90: 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66  e comment that f
5ba0: 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65  ollows each case
5bb0: 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20   are used to.** 
5bc0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50  construct the OP
5bd0: 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20  FLG_INITIALIZER 
5be0: 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69  value that initi
5bf0: 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f  alizes opcodePro
5c00: 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77  perty[]..** Keyw
5c10: 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e  ords include: in
5c20: 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74  1, in2, in3, out
5c30: 32 5f 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75  2_prerelease, ou
5c40: 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a  t2, out3.  See.*
5c50: 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e  * the mkopcodeh.
5c60: 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61  awk script for a
5c70: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
5c80: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63  ation..**.** Doc
5c90: 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
5ca0: 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73   VDBE opcodes is
5cb0: 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 63   generated by sc
5cc0: 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65  anning this file
5cd0: 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66  .** for lines of
5ce0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f   that contain "O
5cf0: 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c  pcode:".  That l
5d00: 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ine and all subs
5d10: 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e  equent.** commen
5d20: 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64  t lines are used
5d30: 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
5d40: 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  on of the opcode
5d50: 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74  .html documentat
5d60: 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a  ion.** file..**.
5d70: 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a  ** SUMMARY:.**.*
5d80: 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67  *     Formatting
5d90: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
5da0: 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73 63   scripts that sc
5db0: 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a  an this file..**
5dc0: 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69       Do not devi
5dd0: 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72  ate from the for
5de0: 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75  matting style cu
5df0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a  rrently in use..
5e00: 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  **.*************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e50: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  /../* Opcode:  G
5e60: 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  oto * P2 * * *.*
5e70: 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74  *.** An uncondit
5e80: 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64  ional jump to ad
5e90: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65  dress P2..** The
5ea0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
5eb0: 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20  n executed will 
5ec0: 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61  be .** the one a
5ed0: 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20  t index P2 from 
5ee0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
5ef0: 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e  .** the program.
5f00: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61  .**.** The P1 pa
5f10: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61  rameter is not a
5f20: 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20  ctually used by 
5f30: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f  this opcode.  Ho
5f40: 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20  wever, it.** is 
5f50: 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f  sometimes set to
5f60: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20   1 instead of 0 
5f70: 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  as a hint to the
5f80: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68   command-line sh
5f90: 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  ell.** that this
5fa0: 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74   Goto is the bot
5fb0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e  tom of a loop an
5fc0: 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73  d that the lines
5fd0: 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a   from P2 down.**
5fe0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
5ff0: 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69  line should be i
6000: 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c  ndented for EXPL
6010: 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  AIN output..*/.c
6020: 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20  ase OP_Goto: {  
6030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6040: 6d 70 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70  mp */.  pc = pOp
6050: 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20  ->p2 - 1;..  /* 
6060: 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72 65  Opcodes that are
6070: 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f 74   used as the bot
6080: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f  tom of a loop (O
6090: 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c  P_Next, OP_Prev,
60a0: 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20  .  ** OP_VNext, 
60b0: 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f  OP_RowSetNext, o
60c0: 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29  r OP_SorterNext)
60d0: 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75   all jump here u
60e0: 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74  pon.  ** complet
60f0: 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73  ion.  Check to s
6100: 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e  ee if sqlite3_in
6110: 74 65 72 72 75 70 74 28 29 20 68 61 73 20 62 65  terrupt() has be
6120: 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f  en called.  ** o
6130: 72 20 69 66 20 74 68 65 20 70 72 6f 67 72 65 73  r if the progres
6140: 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73  s callback needs
6150: 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20   to be invoked. 
6160: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20  .  **.  ** This 
6170: 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72 75  code uses unstru
6180: 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74  ctured "goto" st
6190: 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65  atements and doe
61a0: 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e  s not look clean
61b0: 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20  ..  ** But that 
61c0: 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c  is not due to sl
61d0: 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69  oppy coding habi
61e0: 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20  ts. The code is 
61f0: 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a  written this.  *
6200: 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72  * way for perfor
6210: 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20  mance, to avoid 
6220: 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68  having to run th
6230: 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20  e interrupt and 
6240: 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68  progress.  ** ch
6250: 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70  ecks on every op
6260: 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70  code.  This help
6270: 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  s sqlite3_step()
6280: 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e   to run about 1.
6290: 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61  5%.  ** faster a
62a0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c  ccording to "val
62b0: 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63  grind --tool=cac
62c0: 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63  hegrind" */.chec
62d0: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
62e0: 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73  .  if( db->u1.is
62f0: 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f  Interrupted ) go
6300: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
6310: 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64  interrupt;.#ifnd
6320: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
6330: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
6340: 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70  .  /* Call the p
6350: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6360: 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67   if it is config
6370: 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71  ured and the req
6380: 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a  uired number.  *
6390: 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61  * of VDBE ops ha
63a0: 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64  ve been executed
63b0: 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74   (either since t
63c0: 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  his invocation o
63d0: 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  f.  ** sqlite3Vd
63e0: 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63  beExec() or sinc
63f0: 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20  e last time the 
6400: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6410: 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20  k was called).. 
6420: 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72   ** If the progr
6430: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74  ess callback ret
6440: 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65  urns non-zero, e
6450: 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20  xit the virtual 
6460: 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a  machine with.  *
6470: 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20  * a return code 
6480: 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20  SQLITE_ABORT..  
6490: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
64a0: 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d  ogress!=0 && nVm
64b0: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
64c0: 69 6d 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65  imit ){.    asse
64d0: 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  rt( db->nProgres
64e0: 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e  sOps!=0 );.    n
64f0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
6500: 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50  nVmStep + db->nP
6510: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56  rogressOps - (nV
6520: 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72  mStep%db->nProgr
6530: 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28  essOps);.    if(
6540: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
6550: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
6560: 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
6570: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
6580: 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
6590: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20  _error_halt;.   
65a0: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
65b0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
65c0: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
65d0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
65e0: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
65f0: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6600: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6610: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6620: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6630: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6650: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6660: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6670: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
6680: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6690: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
66a0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
66b0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
66c0: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  pIn1)==0 );.  me
66d0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
66e0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
66f0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6700: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6710: 70 63 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  pc;.  REGISTER_T
6720: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6730: 6e 31 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d  n1);.  pc = pOp-
6740: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6750: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6760: 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a   Return P1 * * *
6770: 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
6780: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6790: 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20  ction after the 
67a0: 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73  address in regis
67b0: 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a  ter P1.  After.*
67c0: 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  * the jump, regi
67d0: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
67e0: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61  undefined..*/.ca
67f0: 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20  se OP_Return: { 
6800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6810: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
6820: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6830: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
6840: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
6850: 20 70 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d   pc = (int)pIn1-
6860: 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  >u.i;.  pIn1->fl
6870: 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
6880: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
6890: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74  ./* Opcode: Init
68a0: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20  Coroutine P1 P2 
68b0: 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  P3 * *.**.** Set
68c0: 20 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20   up register P1 
68d0: 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
68e0: 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72  Yield to the cor
68f0: 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65  outine.** locate
6900: 64 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e  d at address P3.
6910: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20  .**.** If P2!=0 
6920: 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69  then the corouti
6930: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ne implementatio
6940: 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  n immediately fo
6950: 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70  llows.** this op
6960: 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f  code.  So jump o
6970: 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  ver the coroutin
6980: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
6990: 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50   to.** address P
69a0: 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
69b0: 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a  o: EndCoroutine.
69c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43  */.case OP_InitC
69d0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
69e0: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
69f0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
6a00: 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  &  pOp->p1<=(p->
6a10: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
6a20: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6a30: 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p2>=0 && pOp-
6a40: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
6a50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
6a60: 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d  =0 && pOp->p3<p-
6a70: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d  >nOp );.  pOut =
6a80: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6a90: 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62 65  .  assert( !Vdbe
6aa0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
6ab0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   );.  pOut->u.i 
6ac0: 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20  = pOp->p3 - 1;. 
6ad0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
6ae0: 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f  EM_Int;.  if( pO
6af0: 70 2d 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70  p->p2 ) pc = pOp
6b00: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61  ->p2 - 1;.  brea
6b10: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6b20: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
6b30: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6b40: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
6b50: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
6b60: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
6b70: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
6b80: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
6b90: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
6ba0: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
6bb0: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6bc0: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6bd0: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
6be0: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6bf0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6c00: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
6c10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6c20: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
6c30: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
6c40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6c50: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6c60: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6c70: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6c80: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
6c90: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
6ca0: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
6cb0: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
6cc0: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
6cd0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
6ce0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
6cf0: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
6d00: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
6d10: 4f 70 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61  Op );.  pc = pCa
6d20: 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20  ller->p2 - 1;.  
6d30: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6d40: 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62  M_Undefined;.  b
6d50: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6d60: 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32  de:  Yield P1 P2
6d70: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61   * * *.**.** Swa
6d80: 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f  p the program co
6d90: 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76  unter with the v
6da0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6db0: 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61   P1.  This.** ha
6dc0: 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20  s the effect of 
6dd0: 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f  yielding to a co
6de0: 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  routine..**.** I
6df0: 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  f the coroutine 
6e00: 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64  that is launched
6e10: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
6e20: 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a  tion ends with.*
6e30: 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72  * Yield or Retur
6e40: 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20  n then continue 
6e50: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
6e60: 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
6e70: 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  .** the coroutin
6e80: 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68  e launched by th
6e90: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  is instruction e
6ea0: 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43  nds with.** EndC
6eb0: 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a  oroutine, then j
6ec0: 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72  ump to P2 rather
6ed0: 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67   than continuing
6ee0: 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78   with the.** nex
6ef0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
6f00: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
6f10: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
6f20: 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b  case OP_Yield: {
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
6f40: 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e  n1, jump */.  in
6f50: 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31  t pcDest;.  pIn1
6f60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6f70: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
6f80: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
6f90: 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  )==0 );.  pIn1->
6fa0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
6fb0: 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74  .  pcDest = (int
6fc0: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
6fd0: 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20  n1->u.i = pc;.  
6fe0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6ff0: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20  Op->p1, pIn1);. 
7000: 20 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20   pc = pcDest;.  
7010: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7020: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
7030: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35    P1 P2 P3 P4 P5
7040: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
7050: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
7060: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
7070: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
7080: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
7090: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
70a0: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
70b0: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
70c0: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
70d0: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
70e0: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
70f0: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
7100: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7110: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7120: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7130: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
7140: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
7150: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
7160: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
7170: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
7180: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
7190: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
71a0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
71b0: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
71c0: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
71d0: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
71e0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
71f0: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
7200: 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d  P5.**.** Exit im
7210: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
7220: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
7230: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
7240: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
7250: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
7260: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
7270: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
7280: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
7290: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
72a0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
72b0: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
72c0: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
72d0: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
72e0: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
72f0: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
7300: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
7310: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
7320: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
7330: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
7340: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
7350: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
7360: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
7370: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
7380: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
7390: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
73a0: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
73b0: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
73c0: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
73d0: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
73e0: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
73f0: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
7400: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
7410: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
7420: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
7430: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
7440: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
7450: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
7460: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
7470: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50   string..**.** P
7480: 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74  5 is a value bet
7490: 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e  ween 0 and 4, in
74a0: 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f  clusive, that mo
74b0: 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74  difies the P4 st
74c0: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ring..**.**    0
74d0: 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a  :  (no change).*
74e0: 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c  *    1:  NOT NUL
74f0: 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c  L contraint fail
7500: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20  ed: P4.**    2: 
7510: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
7520: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7530: 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f      3:  CHECK co
7540: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
7550: 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f   P4.**    4:  FO
7560: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
7570: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7580: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
7590: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69  ot zero and P4 i
75a0: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65  s NULL, then eve
75b0: 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68  rything after th
75c0: 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74  e ":" is.** omit
75d0: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ted..**.** There
75e0: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
75f0: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
7600: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
7610: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
7620: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
7630: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
7640: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
7650: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7660: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
7670: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
7680: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
7690: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
76a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
76b0: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
76c0: 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66   *zLogFmt;..  if
76d0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
76e0: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
76f0: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
7700: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7710: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
7720: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
7730: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62  rame. */.    Vdb
7740: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d  eFrame *pFrame =
7750: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
7760: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
7770: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
7780: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
7790: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
77a0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
77b0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20  Change);.    pc 
77c0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
77d0: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
77e0: 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64  );.    lastRowid
77f0: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
7800: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7810: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
7820: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
7830: 74 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f  tion pc is the O
7840: 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69  P_Program that i
7850: 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70  nvoked the sub-p
7860: 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a  rogram .      **
7870: 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
7880: 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20   halted. If the 
7890: 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  p2 instruction o
78a0: 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20  f this OP_Halt. 
78b0: 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74       ** instruct
78c0: 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45  ion is set to OE
78d0: 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68  _Ignore, then th
78e0: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73  e sub-program is
78f0: 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20   throwing.      
7900: 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63  ** an IGNORE exc
7910: 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20  eption. In this 
7920: 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65  case jump to the
7930: 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69   address specifi
7940: 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74  ed.      ** as t
7950: 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c  he p2 of the cal
7960: 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e  ling OP_Program.
7970: 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20    */.      pc = 
7980: 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b  p->aOp[pc].p2-1;
7990: 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d  .    }.    aOp =
79a0: 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65   p->aOp;.    aMe
79b0: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
79c0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d   break;.  }.  p-
79d0: 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  >rc = pOp->p1;. 
79e0: 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
79f0: 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
7a00: 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69   p->pc = pc;.  i
7a10: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
7a20: 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
7a30: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
7a40: 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  t char * const a
7a50: 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54  zType[] = { "NOT
7a60: 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22   NULL", "UNIQUE"
7a70: 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20  , "CHECK",.     
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7aa0: 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e          "FOREIGN
7ab0: 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61   KEY" };.      a
7ac0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d  ssert( pOp->p5>=
7ad0: 31 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20  1 && pOp->p5<=4 
7ae0: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7af0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  e( pOp->p5==1 );
7b00: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7b10: 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20   pOp->p5==2 );. 
7b20: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7b30: 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20  Op->p5==3 );.   
7b40: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7b50: 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5==4 );.     
7b60: 20 7a 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b   zType = azType[
7b70: 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20  pOp->p5-1];.    
7b80: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79  }else{.      zTy
7b90: 70 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  pe = 0;.    }.  
7ba0: 20 20 61 73 73 65 72 74 28 20 7a 54 79 70 65 21    assert( zType!
7bb0: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21  =0 || pOp->p4.z!
7bc0: 3d 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d  =0 );.    zLogFm
7bd0: 74 20 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64  t = "abort at %d
7be0: 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20   in [%s]: %s";. 
7bf0: 20 20 20 69 66 28 20 7a 54 79 70 65 20 26 26 20     if( zType && 
7c00: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
7c10: 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
7c20: 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
7c30: 20 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61   db, "%s constra
7c40: 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c  int failed: %s",
7c50: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
7c60: 20 20 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20           zType, 
7c70: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7c80: 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
7c90: 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  4.z ){.      sql
7ca0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
7cb0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
7cc0: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
7cd0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7ce0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
7cf0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
7d00: 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  db, "%s constrai
7d10: 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70  nt failed", zTyp
7d20: 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  e);.    }.    sq
7d30: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
7d40: 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20  1, zLogFmt, pc, 
7d50: 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
7d60: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Msg);.  }.  rc =
7d70: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
7d80: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
7d90: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
7da0: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
7db0: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
7dc0: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
7dd0: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
7de0: 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
7df0: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
7e00: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
7e10: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7e20: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
7e30: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
7e40: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
7e50: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
7e60: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
7e70: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
7e80: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
7e90: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
7ea0: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
7eb0: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
7ec0: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
7ed0: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
7ee0: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
7ef0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
7f00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
7f10: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
7f20: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
7f30: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
7f40: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
7f50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
7f60: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
7f70: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7f80: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
7f90: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
7fa0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7fb0: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
7fc0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
7fd0: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
7fe0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
7ff0: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
8000: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
8010: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8020: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8030: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
8040: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
8050: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8060: 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  se */.  assert( 
8070: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
8080: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
8090: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
80a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
80b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
80c0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
80d0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
80e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
80f0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8100: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8110: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8120: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
8130: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
8140: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
8150: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
8160: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
8170: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
8180: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
8190: 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  , out2-prereleas
81a0: 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  e */.  pOut->fla
81b0: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
81c0: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
81d0: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
81e0: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
81f0: 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.r = *pOp->p4
8200: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
8210: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
8220: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
8230: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8240: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8250: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
8260: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
8270: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
8280: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
8290: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
82a0: 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67  ** into a String
82b0: 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69   opcode before i
82c0: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
82d0: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
82e0: 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69  .  During.** thi
82f0: 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  s transformation
8300: 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  , the length of 
8310: 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d  string P4 is com
8320: 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  puted and stored
8330: 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61  .** as the P1 pa
8340: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65  rameter..*/.case
8350: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
8360: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8370: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
8380: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
8390: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
83a0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d  4.z!=0 );.  pOp-
83b0: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
83c0: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
83d0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
83e0: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
83f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8400: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
8410: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
8420: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
8430: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8440: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
8450: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
8460: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
8470: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
8480: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
8490: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
84a0: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
84b0: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
84c0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
84d0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
84e0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
84f0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
8500: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
8510: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
8520: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
8530: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
8540: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
8550: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
8560: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
8570: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
8580: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
8590: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
85a0: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
85b0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
85c0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
85d0: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
85e0: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
85f0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
8600: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
8610: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
8620: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28    }.#endif.  if(
8630: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
8640: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8650: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8660: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8670: 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
8680: 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
8690: 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20  case, OP_String 
86a0: 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64  */.}.  ./* Opcod
86b0: 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20  e: String P1 P2 
86c0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
86d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
86e0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
86f0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
8700: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
8710: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
8720: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
8730: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  2..**.** If P5!=
8740: 30 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  0 and the conten
8750: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
8760: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
8770: 20 7a 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74   zero, then.** t
8780: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
8790: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
87a0: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
87b0: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
87c0: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
87d0: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
87e0: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
87f0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
8800: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
8810: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
8820: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
8830: 20 43 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f   CAST..*/.case O
8840: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8850: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
8860: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
8870: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
8880: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
8890: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
88a0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
88b0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f  ;.  pOut->z = pO
88c0: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d  p->p4.z;.  pOut-
88d0: 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  >n = pOp->p1;.  
88e0: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
88f0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
8900: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
8910: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
8920: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
8930: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
8940: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
8950: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
8960: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49  ursor) );.    pI
8970: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
8980: 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
8990: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
89a0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66  EM_Int );.    if
89b0: 28 20 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f  ( pIn3->u.i ) pO
89c0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
89d0: 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  Blob|MEM_Static|
89e0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20  MEM_Term;.  }.  
89f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8a00: 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20  ode: Null P1 P2 
8a10: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
8a20: 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e  is:  r[P2..P3]=N
8a30: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ULL.**.** Write 
8a40: 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  a NULL into regi
8a50: 73 74 65 72 73 20 50 32 2e 20 20 49 66 20 50 33  sters P2.  If P3
8a60: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 50 32   greater than P2
8a70: 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74  , then also writ
8a80: 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  e.** NULL into r
8a90: 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 65  egister P3 and e
8aa0: 76 65 72 79 20 72 65 67 69 73 74 65 72 20 69 6e  very register in
8ab0: 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20   between P2 and 
8ac0: 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73  P3.  If P3.** is
8ad0: 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28 74   less than P2 (t
8ae0: 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a  ypically P3 is z
8af0: 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72  ero) then only r
8b00: 65 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a  egister P2 is.**
8b10: 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a   set to NULL..**
8b20: 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76 61  .** If the P1 va
8b30: 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
8b40: 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74   then also set t
8b50: 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66  he MEM_Cleared f
8b60: 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e  lag so that.** N
8b70: 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20  ULL values will 
8b80: 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61  not compare equa
8b90: 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45  l even if SQLITE
8ba0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f  _NULLEQ is set o
8bb0: 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50  n.** OP_Ne or OP
8bc0: 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  _Eq..*/.case OP_
8bd0: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
8be0: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
8bf0: 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  ease */.  int cn
8c00: 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61  t;.  u16 nullFla
8c10: 67 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e  g;.  cnt = pOp->
8c20: 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73  p3-pOp->p2;.  as
8c30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8c40: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8c50: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  or) );.  pOut->f
8c60: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20  lags = nullFlag 
8c70: 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d  = pOp->p1 ? (MEM
8c80: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65  _Null|MEM_Cleare
8c90: 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  d) : MEM_Null;. 
8ca0: 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b   while( cnt>0 ){
8cb0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
8cc0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
8cd0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
8ce0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8cf0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
8d00: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
8d10: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
8d20: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
8d30: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8d40: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
8d50: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8d60: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
8d70: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
8d80: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
8d90: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
8da0: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
8db0: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
8dc0: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
8dd0: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
8de0: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
8df0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
8e00: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
8e10: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
8e20: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
8e30: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
8e40: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
8e50: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
8e60: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
8e70: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
8e80: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
8e90: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
8ea0: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
8eb0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
8ec0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
8ed0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
8ee0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
8ef0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p1];.  pOut->f
8f00: 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c  lags = (pOut->fl
8f10: 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d  ags|MEM_Null)&~M
8f20: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
8f30: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8f40: 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20  ode: Blob P1 P2 
8f50: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8f60: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65  is: r[P2]=P4 (le
8f70: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70  n=P1).**.** P4 p
8f80: 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20  oints to a blob 
8f90: 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73  of data P1 bytes
8fa0: 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68   long.  Store th
8fb0: 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65  is.** blob in re
8fc0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8fd0: 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20  se OP_Blob: {   
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8ff0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
9000: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
9010: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
9020: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73  AX_LENGTH );.  s
9030: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9040: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9050: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
9060: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
9070: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
9080: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
9090: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
90a0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
90b0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
90c0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
90d0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
90e0: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
90f0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
9100: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
9110: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
9120: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
9130: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
9140: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
9150: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
9160: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
9170: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
9180: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
9190: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
91a0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
91b0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
91c0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
91d0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65  erelease */.  Me
91e0: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
91f0: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
9200: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
9210: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9220: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
9230: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
9240: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
9250: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d  || pOp->p4.z==p-
9260: 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31  >azVar[pOp->p1-1
9270: 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70  ] );.  pVar = &p
9280: 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d  ->aVar[pOp->p1 -
9290: 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1];.  if( sqlit
92a0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
92b0: 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74  pVar) ){.    got
92c0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
92d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
92e0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
92f0: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
9300: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
9310: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9320: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9330: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
9340: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9350: 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d  opsis:  r[P2@P3]
9360: 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P3].**.** 
9370: 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75  Move the P3 valu
9380: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
9390: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
93a0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
93b0: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
93c0: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
93d0: 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P3-1 are.** lef
93e0: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
93f0: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
9400: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
9410: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
9420: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
9430: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
9440: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
9450: 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65  .** for P3 to be
9460: 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f   less than 1..*/
9470: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
9480: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
9490: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
94a0: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
94b0: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
94c0: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
94d0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
94e0: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
94f0: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
9500: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
9510: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
9520: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
9530: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
9540: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
9550: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
9560: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
9570: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
9580: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
9590: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
95a0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
95b0: 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  ];.  do{.    ass
95c0: 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d  ert( pOut<=&aMem
95d0: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
95e0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
95f0: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
9600: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  m[(p->nMem-p->nC
9610: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
9620: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
9630: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
9640: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
9650: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
9660: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
9670: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69  (pOut, pIn1);.#i
9680: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
9690: 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e  G.    if( pOut->
96a0: 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65  pScopyFrom>=&aMe
96b0: 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70  m[p1] && pOut->p
96c0: 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b  ScopyFrom<&aMem[
96d0: 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20  p1+pOp->p3] ){. 
96e0: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
96f0: 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f  yFrom += p1 - pO
9700: 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e  p->p2;.    }.#en
9710: 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52  dif.    REGISTER
9720: 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75  _TRACE(p2++, pOu
9730: 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  t);.    pIn1++;.
9740: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77      pOut++;.  }w
9750: 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62  hile( --n );.  b
9760: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9770: 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50  de: Copy P1 P2 P
9780: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
9790: 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b  s: r[P2@P3+1]=r[
97a0: 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d  P1@P3+1].**.** M
97b0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65  ake a copy of re
97c0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
97d0: 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73  3 into registers
97e0: 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a   P2..P2+P3..**.*
97f0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
9800: 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20  on makes a deep 
9810: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
9820: 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a  e.  A duplicate.
9830: 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e  ** is made of an
9840: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
9850: 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20   constant.  See 
9860: 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a  also OP_SCopy..*
9870: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20  /.case OP_Copy: 
9880: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20  {.  int n;..  n 
9890: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e  = pOp->p3;.  pIn
98a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
98b0: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
98c0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
98d0: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
98e0: 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20  1 );.  while( 1 
98f0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
9900: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
9910: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
9920: 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65  _Ephem);.    Dee
9930: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
9940: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9950: 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d  _DEBUG.    pOut-
9960: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b  >pScopyFrom = 0;
9970: 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49  .#endif.    REGI
9980: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
9990: 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f  p2+pOp->p3-n, pO
99a0: 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d  ut);.    if( (n-
99b0: 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  -)==0 ) break;. 
99c0: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70     pOut++;.    p
99d0: 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
99e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
99f0: 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20  : SCopy P1 P2 * 
9a00: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9a10: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a   r[P2]=r[P1].**.
9a20: 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f  ** Make a shallo
9a30: 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  w copy of regist
9a40: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
9a50: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
9a60: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
9a70: 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63  akes a shallow c
9a80: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
9a90: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
9aa0: 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f  ** is a string o
9ab0: 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65  r blob, then the
9ac0: 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20   copy is only a 
9ad0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a  pointer to the.*
9ae0: 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68  * original and h
9af0: 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67  ence if the orig
9b00: 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20  inal changes so 
9b10: 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a  will the copy..*
9b20: 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20  * Worse, if the 
9b30: 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c  original is deal
9b40: 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70  located, the cop
9b50: 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69  y becomes invali
9b60: 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70  d..** Thus the p
9b70: 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72  rogram must guar
9b80: 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f  antee that the o
9b90: 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74  riginal will not
9ba0: 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e   change.** durin
9bb0: 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f  g the lifetime o
9bc0: 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65  f the copy.  Use
9bd0: 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65   OP_Copy to make
9be0: 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63   a complete.** c
9bf0: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
9c00: 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  SCopy: {        
9c10: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
9c20: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9c30: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9c40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9c50: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9c60: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
9c70: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9c80: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9c90: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66   MEM_Ephem);.#if
9ca0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9cb0: 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63  .  if( pOut->pSc
9cc0: 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75  opyFrom==0 ) pOu
9cd0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  t->pScopyFrom = 
9ce0: 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62  pIn1;.#endif.  b
9cf0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9d00: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
9d10: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
9d20: 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72  opsis:  output=r
9d30: 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P1@P2].**.** Th
9d40: 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74  e registers P1 t
9d50: 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63  hrough P1+P2-1 c
9d60: 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
9d70: 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74  row of.** result
9d80: 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63  s. This opcode c
9d90: 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65  auses the sqlite
9da0: 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f  3_step() call to
9db0: 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69   terminate.** wi
9dc0: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57  th an SQLITE_ROW
9dd0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
9de0: 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20   it sets up the 
9df0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20  sqlite3_stmt.** 
9e00: 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f  structure to pro
9e10: 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74  vide access to t
9e20: 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50  he r(P1)..r(P1+P
9e30: 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a  2-1) values as.*
9e40: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77  * the result row
9e50: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
9e60: 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20  ultRow: {.  Mem 
9e70: 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a  *pMem;.  int i;.
9e80: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65    assert( p->nRe
9e90: 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32  sColumn==pOp->p2
9ea0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
9eb0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73  p->p1>0 );.  ass
9ec0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70  ert( pOp->p1+pOp
9ed0: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
9ee0: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
9ef0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9f00: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
9f10: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20  LLBACK.  /* Run 
9f20: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75  the progress cou
9f30: 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65  nter just before
9f40: 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f   returning..  */
9f50: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
9f60: 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56  ress!=0.   && nV
9f70: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
9f80: 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e  Limit.   && db->
9f90: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
9fa0: 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20  rogressArg)!=0. 
9fb0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
9fc0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
9fd0: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
9fe0: 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e  or_halt;.  }.#en
9ff0: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
a000: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
a010: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
a020: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
a030: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
a040: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
a050: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
a060: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
a070: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
a080: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
a090: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
a0a0: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
a0b0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
a0c0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
a0d0: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
a0e0: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
a0f0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
a100: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
a110: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
a120: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
a130: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
a140: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
a150: 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54   /* If the SQLIT
a160: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67  E_CountRows flag
a170: 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74   is set in sqlit
a180: 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  e3.flags mask, t
a190: 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74  hen .  ** DML st
a1a0: 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20  atements invoke 
a1b0: 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72  this opcode to r
a1c0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
a1d0: 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d   of rows .  ** m
a1e0: 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75  odified to the u
a1f0: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65  ser. This is the
a200: 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61   only way that a
a210: 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70   VM that.  ** op
a220: 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ens a statement 
a230: 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
a240: 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f  invoke this opco
a250: 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  de..  **.  ** In
a260: 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75   case this is su
a270: 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ch a statement, 
a280: 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d  close any statem
a290: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
a2a0: 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74    ** opened by t
a2b0: 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65  his VM before re
a2c0: 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20  turning control 
a2d0: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
a2e0: 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73  s is to.  ** ens
a2f0: 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65  ure that stateme
a300: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  nt-transactions 
a310: 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65  are always neste
a320: 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69  d, not overlappi
a330: 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  ng..  ** If the 
a340: 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74  open statement-t
a350: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
a360: 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74  t closed here, t
a370: 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a  hen the user.  *
a380: 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68  * may step anoth
a390: 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73  er VM that opens
a3a0: 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65   its own stateme
a3b0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
a3c0: 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65  This.  ** may le
a3d0: 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e  ad to overlappin
a3e0: 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  g statement tran
a3f0: 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  sactions..  **. 
a400: 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e   ** The statemen
a410: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
a420: 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76   never a top-lev
a430: 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  el transaction. 
a440: 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20   Hence.  ** the 
a450: 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c  RELEASE call bel
a460: 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  ow can never fai
a470: 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  l..  */.  assert
a480: 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
a490: 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26  =0 || db->flags&
a4a0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
a4b0: 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
a4c0: 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65  e3VdbeCloseState
a4d0: 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e  ment(p, SAVEPOIN
a4e0: 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66  T_RELEASE);.  if
a4f0: 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49  ( NEVER(rc!=SQLI
a500: 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72  TE_OK) ){.    br
a510: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
a520: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
a530: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
a540: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
a550: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
a560: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
a570: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
a580: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
a590: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
a5a0: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
a5b0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
a5c0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
a5d0: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
a5e0: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
a5f0: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
a600: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
a610: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
a620: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
a630: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
a640: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
a650: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
a660: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
a670: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
a680: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
a690: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
a6a0: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
a6b0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
a6c0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
a6d0: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
a6e0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
a6f0: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
a700: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
a710: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
a720: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
a730: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a740: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
a750: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
a760: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
a770: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f  oto no_mem;..  /
a780: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
a790: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
a7a0: 20 3d 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20   = pc + 1;.  rc 
a7b0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
a7c0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
a7d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a7e0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
a7f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a800: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
a810: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
a820: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
a830: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
a840: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
a850: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
a860: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
a870: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
a880: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
a890: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
a8a0: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
a8b0: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
a8c0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
a8d0: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
a8e0: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
a8f0: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
a900: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
a910: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
a920: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
a930: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
a940: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
a950: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
a960: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
a970: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
a980: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
a990: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
a9a0: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
a9b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
a9c0: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
a9d0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a9e0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
a9f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
aa00: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
aa10: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
aa20: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
aa30: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
aa40: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
aa50: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
aa60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
aa70: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
aa80: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
aa90: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
aaa0: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
aab0: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
aac0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
aad0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
aae0: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
aaf0: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
ab00: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
ab10: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
ab20: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
ab30: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
ab40: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
ab50: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
ab60: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
ab70: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
ab80: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
ab90: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
aba0: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
abb0: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
abc0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
abd0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
abe0: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
abf0: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
ac00: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
ac10: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
ac20: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
ac30: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
ac40: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
ac50: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
ac60: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
ac70: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
ac80: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
ac90: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
aca0: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
acb0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
acc0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
acd0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
ace0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
acf0: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
ad00: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
ad10: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
ad20: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
ad30: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
ad40: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
ad50: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
ad60: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
ad70: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
ad80: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
ad90: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
ada0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
adb0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
adc0: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
add0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
ade0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
adf0: 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]*r[P2].**.
ae00: 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74  **.** Multiply t
ae10: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ae20: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
ae30: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
ae40: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
ae50: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
ae60: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
ae70: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
ae80: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
ae90: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
aea0: 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61  * Opcode: Subtra
aeb0: 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ct P1 P2 P3 * *.
aec0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
aed0: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
aee0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
aef0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
af00: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
af10: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
af20: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
af30: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
af40: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
af50: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
af60: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
af70: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
af80: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
af90: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
afa0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
afb0: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
afc0: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
afd0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
afe0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
aff0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b000: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b010: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b020: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
b030: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
b040: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
b050: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
b060: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
b070: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
b080: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
b090: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b0a0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b0b0: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
b0c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b0d0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b0e0: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
b0f0: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
b100: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
b110: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
b120: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
b130: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b140: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b150: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b160: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
b170: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b180: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
b190: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b1a0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
b1b0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
b1c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b1d0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
b1e0: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
b1f0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b200: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
b210: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b220: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
b230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b240: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
b250: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b260: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
b270: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
b280: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
b290: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
b2a0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
b2b0: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
b2c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b2d0: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
b2e0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b2f0: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
b300: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
b310: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
b320: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b330: 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b  .  char bIntint;
b340: 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75     /* Started ou
b350: 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72  t as two integer
b360: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75   operands */.  u
b370: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  16 flags;      /
b380: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
b390: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
b3a0: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36   inputs */.  u16
b3b0: 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20   type1;      /* 
b3c0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
b3d0: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
b3e0: 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20    u16 type2;    
b3f0: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
b400: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
b410: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  nd */.  i64 iA; 
b420: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
b430: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
b440: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
b450: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
b460: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
b470: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b480: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
b490: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
b4a0: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
b4b0: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
b4c0: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
b4d0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
b4e0: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
b4f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b500: 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75  1];.  type1 = nu
b510: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b  mericType(pIn1);
b520: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b530: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65  pOp->p2];.  type
b540: 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  2 = numericType(
b550: 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20  pIn2);.  pOut = 
b560: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
b570: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
b580: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b590: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
b5a0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
b5b0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
b5c0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
b5d0: 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  l;.  if( (type1 
b5e0: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
b5f0: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
b600: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
b610: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
b620: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
b630: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
b640: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
b650: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
b660: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
b670: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
b680: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
b690: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
b6a0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
b6b0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
b6c0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
b6d0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
b6e0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b6f0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
b700: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
b710: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
b720: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
b730: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b740: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
b750: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
b760: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b770: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b780: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b790: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
b7a0: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
b7b0: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
b7c0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
b7d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b7e0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
b7f0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
b800: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
b810: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
b820: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
b830: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
b840: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
b850: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
b860: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
b870: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
b880: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
b890: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
b8a0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
b8b0: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
b8c0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
b8d0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
b8e0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
b8f0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
b900: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
b910: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
b920: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
b930: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
b940: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
b950: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
b960: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b970: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
b980: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
b990: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b9a0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
b9b0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
b9c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b9d0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
b9e0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
b9f0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
ba00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
ba10: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
ba20: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
ba30: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
ba40: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
ba50: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
ba60: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
ba70: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
ba80: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
ba90: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
baa0: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
bab0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
bac0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
bad0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bae0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
baf0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bb00: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bb10: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
bb20: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
bb30: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
bb40: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
bb50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
bb60: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
bb70: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
bb80: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
bb90: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bba0: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
bbb0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
bbc0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
bbd0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
bbe0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bbf0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
bc00: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
bc10: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bc20: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
bc30: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
bc40: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
bc50: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
bc60: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
bc70: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
bc80: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
bc90: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
bca0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
bcb0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
bcc0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
bcd0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
bce0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
bcf0: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
bd00: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
bd10: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
bd20: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
bd30: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
bd40: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
bd50: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
bd60: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
bd70: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
bd80: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
bd90: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
bda0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
bdb0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
bdc0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
bdd0: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
bde0: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
bdf0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
be00: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
be10: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
be20: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
be30: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
be40: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
be50: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
be60: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
be70: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
be80: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
be90: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
bea0: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
beb0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
bec0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
bed0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
bee0: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
bef0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
bf00: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
bf10: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
bf20: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
bf30: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
bf40: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
bf50: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
bf60: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
bf70: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
bf80: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
bf90: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
bfa0: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
bfb0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
bfc0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
bfd0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
bfe0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
bff0: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
c000: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c010: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
c020: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
c030: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c040: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
c050: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
c060: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
c070: 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a  func(r[P2@P5]).*
c080: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
c090: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
c0a0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
c0b0: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
c0c0: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
c0d0: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
c0e0: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
c0f0: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
c100: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
c110: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
c120: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
c130: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
c140: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
c150: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
c160: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
c170: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
c180: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
c190: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
c1a0: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
c1b0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
c1c0: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
c1d0: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
c1e0: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
c1f0: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
c200: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
c210: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
c220: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
c230: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
c240: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
c250: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
c260: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
c270: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
c280: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
c290: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
c2a0: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
c2b0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
c2c0: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
c2d0: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
c2e0: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
c2f0: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
c300: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
c310: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
c320: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
c330: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
c340: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
c350: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
c360: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
c370: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
c380: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
c390: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b  *apVal;.  int n;
c3a0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
c3b0: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
c3c0: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
c3d0: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
c3e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
c3f0: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
c400: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
c410: 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4f  sor) );.  ctx.pO
c420: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
c430: 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
c440: 6f 43 68 61 6e 67 65 28 70 2c 20 63 74 78 2e 70  oChange(p, ctx.p
c450: 4f 75 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  Out);..  assert(
c460: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
c470: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
c480: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
c490: 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61  ursor)+1) );.  a
c4a0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
c4b0: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
c4c0: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
c4d0: 20 20 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70    pArg = &aMem[p
c4e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69  Op->p2];.  for(i
c4f0: 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41  =0; i<n; i++, pA
c500: 72 67 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  rg++){.    asser
c510: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41  t( memIsValid(pA
c520: 72 67 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c  rg) );.    apVal
c530: 5b 69 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20  [i] = pArg;.    
c540: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
c550: 41 72 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Arg);.    REGIST
c560: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
c570: 2b 69 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a  +i, pArg);.  }..
c580: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
c590: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
c5a0: 46 20 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63  F );.  ctx.pFunc
c5b0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
c5c0: 3b 0a 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63  ;.  ctx.iOp = pc
c5d0: 3b 0a 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20  ;.  ctx.pVdbe = 
c5e0: 70 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  p;.  MemSetTypeF
c5f0: 6c 61 67 28 63 74 78 2e 70 4f 75 74 2c 20 4d 45  lag(ctx.pOut, ME
c600: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 66  M_Null);.  ctx.f
c610: 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a  ErrorOrAux = 0;.
c620: 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
c630: 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28  = lastRowid;.  (
c640: 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e  *ctx.pFunc->xFun
c650: 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  c)(&ctx, n, apVa
c660: 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  l); /* IMP: R-24
c670: 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c  505-23230 */.  l
c680: 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
c690: 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65  astRowid;  /* Re
c6a0: 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61  member rowid cha
c6b0: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78 46 75  nges made by xFu
c6c0: 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74  nc */..  /* If t
c6d0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
c6e0: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
c6f0: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
c700: 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66  n */.  if( ctx.f
c710: 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
c720: 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f    if( ctx.isErro
c730: 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
c740: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
c750: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
c760: 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
c770: 5f 74 65 78 74 28 63 74 78 2e 70 4f 75 74 29 29  _text(ctx.pOut))
c780: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 63 74 78  ;.      rc = ctx
c790: 2e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  .isError;.    }.
c7a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44      sqlite3VdbeD
c7b0: 65 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c 20  eleteAuxData(p, 
c7c0: 70 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  pc, pOp->p1);.  
c7d0: 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65  }..  /* Copy the
c7e0: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c7f0: 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67  unction into reg
c800: 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71  ister P3 */.  sq
c810: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
c820: 6e 63 6f 64 69 6e 67 28 63 74 78 2e 70 4f 75 74  ncoding(ctx.pOut
c830: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69  , encoding);.  i
c840: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
c850: 6d 54 6f 6f 42 69 67 28 63 74 78 2e 70 4f 75 74  mTooBig(ctx.pOut
c860: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
c870: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45  o_big;.  }..  RE
c880: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
c890: 2d 3e 70 33 2c 20 63 74 78 2e 70 4f 75 74 29 3b  ->p3, ctx.pOut);
c8a0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
c8b0: 4f 42 53 49 5a 45 28 63 74 78 2e 70 4f 75 74 29  OBSIZE(ctx.pOut)
c8c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c8d0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
c8e0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c8f0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
c900: 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]&r[P2].**.
c910: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
c920: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
c930: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
c940: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
c950: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
c960: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c970: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c980: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c990: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c9a0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c9b0: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
c9c0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
c9d0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c  s:  r[P3]=r[P1]|
c9e0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
c9f0: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52   the bit-wise OR
ca00: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
ca10: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
ca20: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
ca30: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
ca40: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
ca50: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
ca60: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
ca70: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
ca80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
ca90: 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20  Left P1 P2 P3 * 
caa0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
cab0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
cac0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
cad0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
cae0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
caf0: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
cb00: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
cb10: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
cb20: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
cb30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
cb40: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
cb50: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
cb60: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
cb70: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
cb80: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
cb90: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
cba0: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
cbb0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
cbc0: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32  sis:  r[P3]=r[P2
cbd0: 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]>>r[P1].**.** S
cbe0: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
cbf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cc00: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
cc10: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
cc20: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
cc30: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
cc40: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
cc50: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
cc60: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
cc70: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
cc80: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
cc90: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
cca0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
ccb0: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ccd0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
cce0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
ccf0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
cd00: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
cd10: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cd20: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
cd30: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
cd40: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
cd50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cd60: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
cd70: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
cd80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
cd90: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
cda0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cdb0: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
cdc0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
cdd0: 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20   iA;.  u64 uA;. 
cde0: 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70   i64 iB;.  u8 op
cdf0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
ce00: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
ce10: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
ce20: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
ce30: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
ce40: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
ce50: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
ce60: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
ce70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ce80: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
ce90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
cea0: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
ceb0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
cec0: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
ced0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
cee0: 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  op = pOp->op
cef0: 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d  code;.  if( op==
cf00: 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20  OP_BitAnd ){.   
cf10: 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA &= iB;.  }el
cf20: 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  se if( op==OP_Bi
cf30: 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d  tOr ){.    iA |=
cf40: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
cf50: 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73   iB!=0 ){.    as
cf60: 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69  sert( op==OP_Shi
cf70: 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f  ftRight || op==O
cf80: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a  P_ShiftLeft );..
cf90: 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69      /* If shifti
cfa0: 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65  ng by a negative
cfb0: 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69   amount, shift i
cfc0: 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65  n the other dire
cfd0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ction */.    if(
cfe0: 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61   iB<0 ){.      a
cff0: 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52  ssert( OP_ShiftR
d000: 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ight==OP_ShiftLe
d010: 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70  ft+1 );.      op
d020: 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66   = 2*OP_ShiftLef
d030: 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20  t + 1 - op;.    
d040: 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20    iB = iB>(-64) 
d050: 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20  ? -iB : 64;.    
d060: 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36  }..    if( iB>=6
d070: 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20  4 ){.      iA = 
d080: 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50  (iA>=0 || op==OP
d090: 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20  _ShiftLeft) ? 0 
d0a0: 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  : -1;.    }else{
d0b0: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75  .      memcpy(&u
d0c0: 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75  A, &iA, sizeof(u
d0d0: 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  A));.      if( o
d0e0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
d0f0: 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c  ){.        uA <<
d100: 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = iB;.      }els
d110: 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e  e{.        uA >>
d120: 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a  = iB;.        /*
d130: 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20   Sign-extend on 
d140: 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66  a right shift of
d150: 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   a negative numb
d160: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
d170: 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28  ( iA<0 ) uA |= (
d180: 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66  (((u64)0xfffffff
d190: 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66  f)<<32)|0xffffff
d1a0: 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a  ff) << (64-iB);.
d1b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
d1c0: 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73  mcpy(&iA, &uA, s
d1d0: 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20  izeof(iA));.    
d1e0: 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
d1f0: 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74  i = iA;.  MemSet
d200: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
d210: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
d220: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d230: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
d240: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d250: 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32    r[P1]=r[P1]+P2
d260: 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20  .** .** Add the 
d270: 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74  constant P2 to t
d280: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d290: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20  ster P1..** The 
d2a0: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
d2b0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
d2c0: 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20  ** To force any 
d2d0: 72 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61  register to be a
d2e0: 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20  n integer, just 
d2f0: 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f  add 0..*/.case O
d300: 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20  P_AddImm: {     
d310: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d320: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d330: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
d340: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d350: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
d360: 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
d370: 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  y(pIn1);.  pIn1-
d380: 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  >u.i += pOp->p2;
d390: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d3a0: 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e  Opcode: MustBeIn
d3b0: 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
d3c0: 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76   .** Force the v
d3d0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d3e0: 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74   P1 to be an int
d3f0: 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61  eger.  If the va
d400: 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
d410: 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61  not an integer a
d420: 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  nd cannot be con
d430: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
d440: 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75  nteger.** withou
d450: 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65  t data loss, the
d460: 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
d470: 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20  ly to P2, or if 
d480: 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61  P2==0.** raise a
d490: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  n SQLITE_MISMATC
d4a0: 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a  H exception..*/.
d4b0: 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e  case OP_MustBeIn
d4c0: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
d4d0: 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
d4e0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d4f0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
d500: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d510: 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
d520: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
d530: 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In1, SQLITE_AFF_
d540: 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
d550: 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  g);.    VdbeBran
d560: 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66  chTaken((pIn1->f
d570: 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30  lags&MEM_Int)==0
d580: 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70  , 2);.    if( (p
d590: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d5a0: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
d5b0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
d5c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
d5d0: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
d5e0: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
d5f0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
d600: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
d610: 20 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70          pc = pOp
d620: 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
d630: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
d640: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d  .    }.  }.  Mem
d650: 53 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31  SetTypeFlag(pIn1
d660: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
d670: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
d680: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d690: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
d6a0: 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69  code: RealAffini
d6b0: 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ty P1 * * * *.**
d6c0: 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
d6d0: 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  P1 holds an inte
d6e0: 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74  ger convert it t
d6f0: 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  o a real value..
d700: 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
d710: 65 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65  e is used when e
d720: 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d  xtracting inform
d730: 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c  ation from a col
d740: 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20  umn that.** has 
d750: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20  REAL affinity.  
d760: 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  Such column valu
d770: 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  es may still be 
d780: 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74  stored as.** int
d790: 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65  egers, for space
d7a0: 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74   efficiency, but
d7b0: 20 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f   after extractio
d7c0: 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a  n we want them.*
d7d0: 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61  * to have only a
d7e0: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a   real value..*/.
d7f0: 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69  case OP_RealAffi
d800: 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20  nity: {         
d810: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
d820: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d830: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d840: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d850: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73  MEM_Int ){.    s
d860: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61  qlite3VdbeMemRea
d870: 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  lify(pIn1);.  }.
d880: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
d890: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
d8a0: 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f  E_OMIT_CAST./* O
d8b0: 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50  pcode: Cast P1 P
d8c0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
d8d0: 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
d8e0: 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65  P1]).**.** Force
d8f0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
d900: 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20  gister P1 to be 
d910: 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64  the type defined
d920: 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c   by P2..** .** <
d930: 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  ul>.** <li value
d940: 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c  ="97"> TEXT.** <
d950: 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42  li value="98"> B
d960: 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  LOB.** <li value
d970: 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a  ="99"> NUMERIC.*
d980: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30  * <li value="100
d990: 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c  "> INTEGER.** <l
d9a0: 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52  i value="101"> R
d9b0: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
d9c0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d9d0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d9e0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d9f0: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
da00: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
da10: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
da20: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
da30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
da40: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f  2>=SQLITE_AFF_NO
da50: 4e 45 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  NE && pOp->p2<=S
da60: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
da70: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
da80: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
da90: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
daa0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
dab0: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
dac0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
dad0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
dae0: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
daf0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
db00: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
db10: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
db20: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
db30: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
db40: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
db50: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
db60: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
db70: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
db80: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
db90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
dba0: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
dbb0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
dbc0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
dbd0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
dbe0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
dbf0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
dc00: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
dc10: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
dc20: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
dc30: 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f  f r[P1]<r[P3] go
dc40: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  to P2.**.** Comp
dc50: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
dc60: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
dc70: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
dc80: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
dc90: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
dca0: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
dcb0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
dcc0: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
dcd0: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
dce0: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
dcf0: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
dd00: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
dd10: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
dd20: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
dd30: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
dd40: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
dd50: 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  h if either oper
dd60: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
dd70: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
dd80: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
dd90: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
dda0: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
ddb0: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
ddc0: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
ddd0: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
dde0: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
ddf0: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
de00: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
de10: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
de20: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
de30: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
de40: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
de50: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
de60: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
de70: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
de80: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
de90: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
dea0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
deb0: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
dec0: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
ded0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
dee0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
def0: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
df00: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
df10: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
df20: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
df30: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
df40: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
df50: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
df60: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
df70: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
df80: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
df90: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
dfa0: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
dfb0: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
dfc0: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
dfd0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
dfe0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
dff0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
e000: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
e010: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
e020: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
e030: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
e040: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
e050: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
e060: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
e070: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
e080: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
e090: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
e0a0: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
e0b0: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
e0c0: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
e0d0: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
e0e0: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
e0f0: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
e100: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
e110: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
e120: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
e130: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
e140: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e150: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
e160: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
e170: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e180: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
e190: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
e1a0: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
e1b0: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
e1c0: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
e1d0: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
e1e0: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
e1f0: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
e200: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
e210: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
e220: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e230: 51 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  Q bit is set in 
e240: 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61  P5, then NULL va
e250: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
e260: 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20  red.** equal to 
e270: 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f  one another, pro
e280: 76 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20  vided that they 
e290: 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69  do not have thei
e2a0: 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a  r MEM_Cleared.**
e2b0: 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20   bit set..*/./* 
e2c0: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e2d0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e2e0: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
e2f0: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
e300: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e310: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e320: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e330: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e340: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e350: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
e360: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
e370: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
e380: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
e390: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
e3a0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e3b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e3c0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e3d0: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e3e0: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e3f0: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e400: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e410: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e420: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e430: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e440: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e450: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e460: 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49  son is false.  I
e470: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e480: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
e490: 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65  e result is true
e4a0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
e4b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e4c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
e4d0: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
e4e0: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
e4f0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
e500: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
e510: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
e520: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
e530: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e540: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d  psis: if r[P1]==
e550: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e560: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e570: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e580: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e590: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e5a0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
e5b0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
e5c0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
e5d0: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
e5e0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
e5f0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
e600: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e610: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e620: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
e630: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e640: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e650: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
e660: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
e670: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
e680: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
e690: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
e6a0: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
e6b0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e6c0: 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65   true.  If eithe
e6d0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e6e0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e6f0: 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49  t is false..** I
e700: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
e710: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
e720: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
e730: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
e740: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
e750: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
e760: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
e770: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
e780: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
e790: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e7a0: 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20  if r[P1]<=r[P3] 
e7b0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e7c0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e7d0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e7e0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e7f0: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e800: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
e810: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
e820: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
e830: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
e840: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
e850: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
e860: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
e870: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e880: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
e890: 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33  ode: Gt P1 P2 P3
e8a0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e8b0: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50  is: if r[P1]>r[P
e8c0: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
e8d0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
e8e0: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
e8f0: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
e900: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
e910: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
e920: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
e930: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
e940: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
e950: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
e960: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
e970: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
e980: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e990: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
e9a0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e9b0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e9c0: 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f   r[P1]>=r[P3] go
e9d0: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e9e0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e9f0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
ea00: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
ea10: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
ea20: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
ea30: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
ea40: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
ea50: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
ea60: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
ea70: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
ea80: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
ea90: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
eaa0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
eab0: 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
eac0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ead0: 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
eae0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
eaf0: 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
eb00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
eb10: 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
eb20: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
eb30: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
eb40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
eb50: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
eb60: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
eb90: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
eba0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ebc0: 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
ebd0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ebe0: 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
ebf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ec00: 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
ec10: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
ec20: 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
ec30: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
ec40: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
ec50: 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
ec60: 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
ec70: 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
ec80: 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
ec90: 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
eca0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
ecb0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
ecc0: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
ecd0: 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
ece0: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
ecf0: 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
ed00: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
ed10: 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
ed20: 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
ed30: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
ed40: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
ed50: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
ed60: 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
ed70: 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
ed80: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
ed90: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
eda0: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
edb0: 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
edc0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
edd0: 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
ede0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
edf0: 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
ee00: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
ee10: 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
ee20: 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
ee30: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
ee40: 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
ee50: 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
ee60: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
ee70: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
ee80: 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
ee90: 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
eea0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
eeb0: 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
eec0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
eed0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c  opcode==OP_Eq ||
eee0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
eef0: 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73  _Ne );.      ass
ef00: 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d  ert( (flags1 & M
ef10: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29  EM_Cleared)==0 )
ef20: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
ef30: 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
ef40: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30  E_JUMPIFNULL)==0
ef50: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66   );.      if( (f
ef60: 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags1&MEM_Null)!
ef70: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
ef80: 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags3&MEM_Null)!=
ef90: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
efa0: 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29  gs3&MEM_Cleared)
efb0: 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
efc0: 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f       res = 0;  /
efd0: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71  * Results are eq
efe0: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
eff0: 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
f000: 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73  = 1;  /* Results
f010: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
f020: 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
f030: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
f040: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
f050: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
f060: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
f070: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
f080: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f090: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
f0a0: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
f0b0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
f0c0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f0d0: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
f0e0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
f0f0: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f100: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
f110: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
f120: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
f130: 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
f140: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
f150: 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ull);.        RE
f160: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
f170: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
f180: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f190: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
f1a0: 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20  n(2,3);.        
f1b0: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
f1c0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f1d0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63 20  ){.          pc 
f1e0: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
f1f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
f200: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f210: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
f220: 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
f230: 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
f240: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
f250: 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
f260: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f270: 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
f280: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
f290: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
f2a0: 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
f2b0: 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  1->flags & (MEM_
f2c0: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
f2d0: 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
f2e0: 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79  ){.        apply
f2f0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
f300: 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d  pIn1,0);.      }
f310: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
f320: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
f330: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
f340: 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
f350: 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e  {.        applyN
f360: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
f370: 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a  In3,0);.      }.
f380: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66      }else if( af
f390: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
f3a0: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20  FF_TEXT ){.     
f3b0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
f3c0: 73 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  s & MEM_Str)==0 
f3d0: 26 26 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  && (pIn1->flags 
f3e0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
f3f0: 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
f400: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
f410: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
f420: 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
f430: 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
f440: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
f450: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
f460: 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
f470: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
f480: 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  g, 1);.      }. 
f490: 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
f4a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
f4b0: 3d 3d 30 20 26 26 20 28 70 49 6e 33 2d 3e 66 6c  ==0 && (pIn3->fl
f4c0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
f4d0: 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
f4e0: 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
f4f0: 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
f500: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
f510: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
f520: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
f530: 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
f540: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
f550: 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
f560: 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
f570: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
f580: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
f590: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
f5a0: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
f5b0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31   );.    if( pIn1
f5c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
f5d0: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
f5e0: 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
f5f0: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20  Blob(pIn1);.    
f600: 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d    flags1 &= ~MEM
f610: 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20  _Zero;.    }.   
f620: 20 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73   if( pIn3->flags
f630: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
f640: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f650: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  MemExpandBlob(pI
f660: 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73  n3);.      flags
f670: 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a  3 &= ~MEM_Zero;.
f680: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
f690: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
f6a0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
f6b0: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
f6c0: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
f6d0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
f6e0: 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
f6f0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
f700: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
f710: 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
f720: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
f730: 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
f740: 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
f750: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
f760: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
f770: 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
f780: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
f790: 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
f7a0: 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
f7b0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
f7c0: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
f7d0: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
f7e0: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
f7f0: 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
f800: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
f810: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f820: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
f830: 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
f840: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
f850: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
f860: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
f870: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
f880: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
f890: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
f8a0: 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  es;.    REGISTER
f8b0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
f8c0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
f8d0: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
f8e0: 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70  ken(res!=0, (pOp
f8f0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
f900: 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20  LLEQ)?2:3);.    
f910: 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
f920: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
f930: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20  .    }.  }.  /* 
f940: 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
f950: 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
f960: 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
f970: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
f980: 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   */.  pIn1->flag
f990: 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 70 49  s = flags1;.  pI
f9a0: 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n3->flags = flag
f9b0: 73 33 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  s3;.  break;.}..
f9c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
f9d0: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
f9e0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
f9f0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
fa00: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
fa10: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
fa20: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
fa30: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
fa40: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
fa50: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
fa60: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
fa70: 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
fa80: 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
fa90: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
faa0: 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
fab0: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
fac0: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
fad0: 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
fae0: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
faf0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
fb00: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
fb10: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
fb20: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
fb30: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
fb40: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
fb50: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
fb60: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
fb70: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
fb80: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
fb90: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fba0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
fbb0: 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50  1@P3] <-> r[P2@P
fbc0: 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  3].**.** Compare
fbd0: 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
fbe0: 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
fbf0: 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
fc00: 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
fc10: 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
fc20: 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
fc30: 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
fc40: 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
fc50: 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
fc60: 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
fc70: 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
fc80: 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
fc90: 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
fca0: 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
fcb0: 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
fcc0: 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
fcd0: 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
fce0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
fcf0: 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
fd00: 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
fd10: 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
fd20: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
fd30: 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
fd40: 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
fd50: 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
fd60: 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
fd70: 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
fd80: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
fd90: 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
fda0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
fdb0: 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
fdc0: 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
fdd0: 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
fde0: 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
fdf0: 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
fe00: 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
fe10: 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
fe20: 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
fe30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
fe40: 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
fe50: 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
fe60: 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
fe70: 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
fe80: 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
fe90: 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
fea0: 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
feb0: 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
fec0: 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
fed0: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
fee0: 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
fef0: 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
ff00: 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
ff10: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
ff20: 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
ff30: 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
ff40: 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
ff50: 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
ff60: 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
ff70: 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
ff80: 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
ff90: 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
ffa0: 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
ffb0: 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f  er */..  if( (pO
ffc0: 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
ffd0: 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65  ERMUTE)==0 ) aPe
ffe0: 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d  rmute = 0;.  n =
fff0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
10000 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
10010 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
10020 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
10030 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
10040 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
10050 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
10060 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  2;.#if SQLITE_DE
10070 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
10080 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
10090 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
100a0 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
100b0 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
100c0 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
100d0 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
100e0 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
100f0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
10100 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
10110 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
10120 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p2+mx<=(p->nMem-
10130 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10140 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
10150 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
10160 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
10170 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
10180 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
10190 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p2+n<=(p->nMem
101a0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
101b0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
101c0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
101d0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
101e0 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
101f0 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
10200 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
10210 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
10220 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  id(&aMem[p1+idx]
10230 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
10240 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
10250 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p2+idx]) );.  
10260 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10270 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
10280 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
10290 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
102a0 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
102b0 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
102c0 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  i<pKeyInfo->nFie
102d0 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
102e0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
102f0 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
10300 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
10310 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
10320 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
10330 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
10340 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
10350 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
10360 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
10370 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
10380 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
10390 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
103a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
103b0 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20   }.  aPermute = 
103c0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
103d0 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
103e0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
103f0 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
10400 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
10410 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
10420 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
10430 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
10440 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10450 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
10460 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
10470 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
10480 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
10490 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
104a0 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
104b0 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
104c0 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
104d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
104e0 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
104f0 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20  are<0 ){.    pc 
10500 3d 20 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20  = pOp->p1 - 1;  
10510 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
10520 30 2c 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  0,3);.  }else if
10530 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
10540 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
10550 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e  2 - 1;  VdbeBran
10560 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20  chTaken(1,3);.  
10570 7d 65 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20  }else{.    pc = 
10580 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64  pOp->p3 - 1;  Vd
10590 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
105a0 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  3);.  }.  break;
105b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
105c0 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
105d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
105e0 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50  3]=(r[P1] && r[P
105f0 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
10600 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f  he logical AND o
10610 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
10620 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
10630 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65   P2 and.** write
10640 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
10650 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
10660 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
10670 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c   or P2 is 0 (fal
10680 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  se) then the res
10690 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66  ult is 0 even if
106a0 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e  .** the other in
106b0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
106c0 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72  NULL and true or
106d0 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a   two NULLs give.
106e0 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ** a NULL output
106f0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
10700 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
10710 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10720 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50  3]=(r[P1] || r[P
10730 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
10740 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66  he logical OR of
10750 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
10760 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
10770 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
10780 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67  he answer in reg
10790 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
107a0 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
107b0 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74  P2 is nonzero (t
107c0 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  rue) then the re
107d0 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29  sult is 1 (true)
107e0 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20  .** even if the 
107f0 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
10800 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
10810 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55   false or two NU
10820 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55  LLs.** give a NU
10830 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  LL output..*/.ca
10840 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20  se OP_And:      
10850 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
10860 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20  as TK_AND, in1, 
10870 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
10880 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20  e OP_Or: {      
10890 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
108a0 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e  s TK_OR, in1, in
108b0 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
108c0 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20   v1;    /* Left 
108d0 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c  operand:  0==FAL
108e0 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
108f0 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
10900 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20  */.  int v2;    
10910 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64  /* Right operand
10920 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  : 0==FALSE, 1==T
10930 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
10940 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49  or NULL */..  pI
10950 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
10960 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
10970 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
10980 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
10990 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
109a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
109b0 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
109c0 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61  .  }.  pIn2 = &a
109d0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
109e0 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
109f0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
10a00 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
10a10 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
10a20 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10a30 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
10a40 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
10a50 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
10a60 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10a70 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
10a80 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
10a90 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
10aa0 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
10ab0 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
10ac0 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
10ad0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
10ae0 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
10af0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
10b00 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
10b10 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
10b20 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
10b30 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
10b40 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
10b50 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
10b60 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10b70 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
10b80 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
10b90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
10ba0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
10bb0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
10bc0 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
10bd0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
10be0 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
10bf0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
10c00 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= !r[P1].**.** 
10c10 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
10c20 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
10c30 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
10c40 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
10c50 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
10c60 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
10c70 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
10c80 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
10c90 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
10ca0 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
10cb0 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
10cc0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ce0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
10cf0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
10d00 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
10d10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
10d20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10d30 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
10d40 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
10d50 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
10d60 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
10d70 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
10d80 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
10d90 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
10da0 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   !sqlite3VdbeInt
10db0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
10dc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10dd0 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50  Opcode: BitNot P
10de0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
10df0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e  nopsis: r[P1]= ~
10e00 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
10e10 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e  rpret the conten
10e20 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
10e30 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   as an integer. 
10e40 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e   Store the.** on
10e50 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66  es-complement of
10e60 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e   the P1 value in
10e70 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
10e80 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20   If P1 holds.** 
10e90 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  a NULL then stor
10ea0 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a  e a NULL in P2..
10eb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f  */.case OP_BitNo
10ec0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
10ed0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
10ee0 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  ITNOT, in1, out2
10ef0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
10f00 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
10f10 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
10f20 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
10f30 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
10f40 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ut);.  if( (pIn1
10f50 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
10f60 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f  ll)==0 ){.    pO
10f70 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
10f80 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
10f90 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62  .i = ~sqlite3Vdb
10fa0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
10fb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10fc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65  ./* Opcode: Once
10fd0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
10fe0 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 22 6f 6e  ** Check the "on
10ff0 63 65 22 20 66 6c 61 67 20 6e 75 6d 62 65 72 20  ce" flag number 
11000 50 31 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  P1. If it is set
11010 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
11020 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74  ction P2. .** Ot
11030 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 68 65  herwise, set the
11040 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74   flag and fall t
11050 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
11060 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
11070 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
11080 73 2c 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  s, this opcode c
11090 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77  auses all follow
110a0 69 6e 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74  ing opcodes up t
110b0 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62 75  hrough P2.** (bu
110c0 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20  t not including 
110d0 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20  P2) to run just 
110e0 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73  once and to be s
110f0 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71  kipped on subseq
11100 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74 68  uent.** times th
11110 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a  rough the loop..
11120 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65 22  **.** All "once"
11130 20 66 6c 61 67 73 20 61 72 65 20 69 6e 69 74 69   flags are initi
11140 61 6c 6c 79 20 63 6c 65 61 72 65 64 20 77 68 65  ally cleared whe
11150 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64  never a prepared
11160 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 69   statement.** fi
11170 72 73 74 20 62 65 67 69 6e 73 20 74 6f 20 72 75  rst begins to ru
11180 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e  n..*/.case OP_On
11190 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
111a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
111b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70  ssert( pOp->p1<p
111c0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20  ->nOnceFlag );. 
111d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
111e0 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f  (p->aOnceFlag[pO
111f0 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20  p->p1]!=0, 2);. 
11200 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61   if( p->aOnceFla
11210 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20  g[pOp->p1] ){.  
11220 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
11230 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
11240 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
11250 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  >p1] = 1;.  }.  
11260 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11270 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
11280 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
11290 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
112a0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
112b0 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
112c0 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
112d0 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
112e0 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
112f0 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
11300 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
11310 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
11320 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
11330 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
11340 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f  s non-zero..*/./
11350 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20  * Opcode: IfNot 
11360 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
11370 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
11380 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11390 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c  gister P1 is Fal
113a0 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  se.  The value.*
113b0 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
113c0 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20  false if it has 
113d0 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20  a numeric value 
113e0 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  of zero.  If the
113f0 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
11400 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
11410 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
11420 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20  d only if P3 is 
11430 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  non-zero..*/.cas
11440 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20  e OP_If:        
11450 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
11460 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50  , in1 */.case OP
11470 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  _IfNot: {       
11480 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
11490 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20  1 */.  int c;.  
114a0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
114b0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
114c0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
114d0 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70  ull ){.    c = p
114e0 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p3;.  }else{
114f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
11500 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
11510 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  NT.    c = sqlit
11520 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11530 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20  In1)!=0;.#else. 
11540 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
11550 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
11560 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20  )!=0.0;.#endif. 
11570 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
11580 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63  de==OP_IfNot ) c
11590 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62   = !c;.  }.  Vdb
115a0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d  eBranchTaken(c!=
115b0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29  0, 2);.  if( c )
115c0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
115d0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
115e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
115f0 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
11600 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11610 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c    if r[P1]==NULL
11620 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
11630 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11640 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11650 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a  er P1 is NULL..*
11660 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c  /.case OP_IsNull
11670 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
11680 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e  * same as TK_ISN
11690 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a  ULL, jump, in1 *
116a0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
116b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62  [pOp->p1];.  Vdb
116c0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70  eBranchTaken( (p
116d0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
116e0 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20  _Null)!=0, 2);. 
116f0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
11700 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
11710 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11720 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
11730 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11740 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
11750 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
11760 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
11770 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
11780 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
11790 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
117a0 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
117b0 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
117c0 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
117d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
117e0 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
117f0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
11800 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11810 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
11820 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
11830 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
11840 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)==0, 2);.  if(
11850 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11860 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
11870 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
11880 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
11890 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
118a0 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
118b0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
118c0 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  is:  r[P3]=PX.**
118d0 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
118e0 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
118f0 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
11900 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
11910 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
11920 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
11930 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
11940 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
11950 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
11960 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
11970 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
11980 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
11990 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
119a0 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
119b0 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
119c0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
119d0 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
119e0 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
119f0 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
11a00 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
11a10 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
11a20 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
11a30 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
11a40 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75  *.** If the colu
11a50 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  mn contains fewe
11a60 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
11a70 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
11a80 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
11a90 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
11aa0 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
11ab0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
11ac0 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
11ad0 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
11ae0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
11af0 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
11b00 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
11b10 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
11b20 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
11b30 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
11b40 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
11b50 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
11b60 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
11b70 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
11b80 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
11b90 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
11ba0 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
11bb0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
11bc0 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
11bd0 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
11be0 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
11bf0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
11c00 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
11c10 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
11c20 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
11c30 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
11c40 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  when.** the resu
11c50 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
11c60 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
11c70 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
11c80 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
11c90 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
11ca0 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
11cb0 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
11cc0 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
11cd0 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
11ce0 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
11cf0 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
11d00 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
11d10 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
11d20 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
11d30 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34  _Column: {.  i64
11d40 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20   payloadSize64; 
11d50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
11d60 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
11d70 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
11d80 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75           /* colu
11d90 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74  mn number to ret
11da0 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43  rieve */.  VdbeC
11db0 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a  ursor *pC;    /*
11dc0 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
11dd0 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a   */.  BtCursor *
11de0 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20  pCrsr;   /* The 
11df0 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a  BTree cursor */.
11e00 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20    u32 *aOffset; 
11e10 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b       /* aOffset[
11e20 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20  i] is offset to 
11e30 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f  start of data fo
11e40 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  r i-th column */
11e50 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
11e60 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
11e70 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
11e80 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
11e90 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
11ea0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
11eb0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
11ec0 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73  r */.  Mem *pDes
11ed0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  t;        /* Whe
11ee0 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
11ef0 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20  extracted value 
11f00 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20  */.  Mem sMem;  
11f10 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
11f20 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
11f30 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
11f40 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
11f50 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20  Data;   /* Part 
11f60 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  of the record be
11f70 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
11f80 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b   const u8 *zHdr;
11f90 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61      /* Next unpa
11fa0 72 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65  rsed byte of the
11fb0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e   header */.  con
11fc0 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20  st u8 *zEndHdr; 
11fd0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69  /* Pointer to fi
11fe0 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74  rst byte after t
11ff0 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  he header */.  u
12000 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20  32 offset;      
12010 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f    /* Offset into
12020 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75   the data */.  u
12030 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20  32 szField;     
12040 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
12050 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74  ytes in the cont
12060 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  ent of a field *
12070 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20  /.  u32 avail;  
12080 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12090 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
120a0 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20  ilable data */. 
120b0 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20   u32 t;         
120c0 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f      /* A type co
120d0 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  de from the reco
120e0 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  rd header */.  u
120f0 31 36 20 66 78 3b 20 20 20 20 20 20 20 20 20 20  16 fx;          
12100 20 20 2f 2a 20 70 44 65 73 74 2d 3e 66 6c 61 67    /* pDest->flag
12110 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  s value */.  Mem
12120 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
12130 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
12140 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
12150 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ..  p2 = pOp->p2
12160 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
12170 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
12180 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
12190 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
121a0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
121b0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
121c0 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
121d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
121e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
121f0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
12200 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
12210 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
12220 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
12230 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46  ssert( p2<pC->nF
12240 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65  ield );.  aOffse
12250 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
12260 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12270 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
12280 45 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  E.  assert( pC->
12290 70 56 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29  pVtabCursor==0 )
122a0 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e  ; /* OP_Column n
122b0 65 76 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76  ever called on v
122c0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
122d0 23 65 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d  #endif.  pCrsr =
122e0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
122f0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
12300 20 7c 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61   || pC->pseudoTa
12310 62 6c 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70  bleReg>0 ); /* p
12320 43 72 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65  Crsr NULL on Pse
12330 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61  udoTables */.  a
12340 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
12350 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
12360 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43  ;          /* pC
12370 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65  ->nullRow on Pse
12380 75 64 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20  udoTables */..  
12390 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
123a0 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c   cache is stale,
123b0 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d   bring it up-to-
123c0 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  date */.  rc = s
123d0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
123e0 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
123f0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
12400 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
12410 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53    if( pC->cacheS
12420 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43  tatus!=p->cacheC
12430 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43  tr ){.    if( pC
12440 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
12450 20 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20     if( pCrsr==0 
12460 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
12470 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
12480 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20  leReg>0 );.     
12490 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b     pReg = &aMem[
124a0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
124b0 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  eg];.        ass
124c0 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
124d0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
124e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
124f0 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
12500 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
12510 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
12520 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d  >szRow = avail =
12530 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20   pReg->n;.      
12540 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
12550 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20  *)pReg->z;.     
12560 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12570 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12580 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
12590 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
125a0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
125b0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
125c0 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
125d0 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43   );.      if( pC
125e0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
125f0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12600 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
12610 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
12620 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f   );.        VVA_
12630 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
12640 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
12650 43 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69  Crsr, &payloadSi
12660 7a 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61  ze64);.        a
12670 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
12680 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20  E_OK ); /* True 
12690 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
126a0 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61  rMoveto() call a
126b0 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  bove */.        
126c0 2f 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  /* sqlite3BtreeP
126d0 61 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73  arseCellPtr() us
126e0 65 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29  es getVarint32()
126f0 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a   to extract the.
12700 20 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f          ** paylo
12710 61 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69  ad size, so it i
12720 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
12730 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74   payloadSize64 t
12740 6f 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  o be.        ** 
12750 6c 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62  larger than 32 b
12760 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  its. */.        
12770 61 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64  assert( (payload
12780 53 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f  Size64 & SQLITE_
12790 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70  MAX_U32)==(u64)p
127a0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a  ayloadSize64 );.
127b0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
127c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
127d0 65 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  eyFetch(pCrsr, &
127e0 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20  avail);.        
127f0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
12800 3d 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69  = (u32)payloadSi
12810 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ze64;.      }els
12820 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
12830 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
12840 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
12850 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56  sr) );.        V
12860 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
12870 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69  lite3BtreeDataSi
12880 7a 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70  ze(pCrsr, &pC->p
12890 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20  ayloadSize);.   
128a0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
128b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
128c0 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61  /* DataSize() ca
128d0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20  nnot fail */.   
128e0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
128f0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
12900 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
12910 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ail);.      }.  
12920 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69      assert( avai
12930 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20  l<=65536 );  /* 
12940 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a  Maximum page siz
12950 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20  e is 64KiB */.  
12960 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
12970 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29  oadSize <= (u32)
12980 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20  avail ){.       
12990 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d   pC->szRow = pC-
129a0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20  >payloadSize;.  
129b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
129c0 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61     pC->szRow = a
129d0 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  vail;.      }.  
129e0 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c      if( pC->payl
129f0 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64  oadSize > (u32)d
12a00 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
12a10 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
12a20 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74  {.        goto t
12a30 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a  oo_big;.      }.
12a40 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61      }.    pC->ca
12a50 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
12a60 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d  acheCtr;.    pC-
12a70 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65  >iHdrOffset = ge
12a80 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52  tVarint32(pC->aR
12a90 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20  ow, offset);.   
12aa0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
12ab0 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74  = 0;.    aOffset
12ac0 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 20  [0] = offset;.. 
12ad0 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
12ae0 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
12af0 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e  se has not given
12b00 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20   us an oversize 
12b10 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44  header..    ** D
12b20 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76  o this now to av
12b30 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20  oid an oversize 
12b40 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12b50 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  n..    **.    **
12b60 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61   Type entries ca
12b70 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61  n be between 1 a
12b80 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e  nd 5 bytes each.
12b90 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79    But 4 and 5 by
12ba0 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73 20  te.    ** types 
12bb0 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61  use so much data
12bc0 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72   space that ther
12bd0 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30  e can only be 40
12be0 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20  96 and 32 of.   
12bf0 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63   ** them, respec
12c00 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20  tively.  So the 
12c10 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c  maximum header l
12c20 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66 72  ength results fr
12c30 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79  om a.    ** 3-by
12c40 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
12c50 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
12c60 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
12c70 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
12c80 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
12c90 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
12ca0 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
12cb0 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
12cc0 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  7..    */.    if
12cd0 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37  ( offset > 98307
12ce0 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d   || offset > pC-
12cf0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a  >payloadSize ){.
12d00 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
12d10 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
12d20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
12d30 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20  lumn_error;.    
12d40 7d 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c  }..    if( avail
12d50 3c 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20  <offset ){.     
12d60 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
12d70 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
12d80 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
12d90 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
12da0 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
12db0 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
12dc0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
12dd0 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
12de0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
12df0 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
12e00 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
12e10 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
12e20 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
12e30 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
12e40 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
12e50 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
12e60 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
12e70 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
12e80 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20  pC->szRow = 0;. 
12e90 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65     }..    /* The
12ea0 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20   following goto 
12eb0 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
12ec0 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f  on.  It can be o
12ed0 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20 2a  mitted and.    *
12ee0 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c  * everything wil
12ef0 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42  l still work.  B
12f00 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20  ut OP_Column is 
12f10 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73 74 65  measurably faste
12f20 72 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70  r.    ** by skip
12f30 70 69 6e 67 20 74 68 65 20 73 75 62 73 65 71 75  ping the subsequ
12f40 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c  ent conditional,
12f50 20 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73   which is always
12f60 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20   true..    */.  
12f70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48    assert( pC->nH
12f80 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20  drParsed<=p2 ); 
12f90 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69          /* Condi
12fa0 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a  tional skipped *
12fb0 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f  /.    goto op_co
12fc0 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
12fd0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
12fe0 20 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74   sure at least t
12ff0 68 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e  he first p2+1 en
13000 74 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61  tries of the hea
13010 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20  der have been.  
13020 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61  ** parsed and va
13030 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lid information 
13040 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20  is in aOffset[] 
13050 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e  and pC->aType[].
13060 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e  .  */.  if( pC->
13070 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
13080 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
13090 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72  e is more header
130a0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70   available for p
130b0 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65  arsing in the re
130c0 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a  cord, try.    **
130d0 20 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69   to extract addi
130e0 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70  tional fields up
130f0 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b   through the p2+
13100 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20  1-th field .    
13110 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e  */.    op_column
13120 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20  _read_header:.  
13130 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66    if( pC->iHdrOf
13140 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20  fset<aOffset[0] 
13150 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ){.      /* Make
13160 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e   sure zData poin
13170 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20  ts to enough of 
13180 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f  the record to co
13190 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e 20  ver the header. 
131a0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
131b0 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20  >aRow==0 ){.    
131c0 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d      memset(&sMem
131d0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
131e0 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  ));.        rc =
131f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
13200 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
13210 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a  0, aOffset[0], .
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 20 20 20 21 70 43 2d 3e 69 73 54 61 62 6c       !pC->isTabl
13250 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  e, &sMem);.     
13260 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
13270 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
13280 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13290 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
132a0 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  }.        zData 
132b0 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
132c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
132d0 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
132e0 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
132f0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
13300 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
13310 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
13320 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
13330 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
13340 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e  .      i = pC->n
13350 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20  HdrParsed;.     
13360 20 6f 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65   offset = aOffse
13370 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72  t[i];.      zHdr
13380 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69   = zData + pC->i
13390 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20  HdrOffset;.     
133a0 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61   zEndHdr = zData
133b0 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20   + aOffset[0];. 
133c0 20 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d       assert( i<=
133d0 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
133e0 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  dr );.      do{.
133f0 20 20 20 20 20 20 20 20 69 66 28 20 7a 48 64 72          if( zHdr
13400 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20  [0]<0x80 ){.    
13410 20 20 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30        t = zHdr[0
13420 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  ];.          zHd
13430 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  r++;.        }el
13440 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
13450 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
13460 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
13470 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
13480 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b        pC->aType[
13490 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20  i] = t;.        
134a0 73 7a 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65  szField = sqlite
134b0 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
134c0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f  en(t);.        o
134d0 66 66 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64  ffset += szField
134e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6f 66  ;.        if( of
134f0 66 73 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20  fset<szField ){ 
13500 20 2f 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73   /* True if offs
13510 65 74 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a  et overflows */.
13520 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d            zHdr =
13530 20 26 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f   &zEndHdr[1];  /
13540 2a 20 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f  * Forces SQLITE_
13550 43 4f 52 52 55 50 54 20 72 65 74 75 72 6e 20 62  CORRUPT return b
13560 65 6c 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20  elow */.        
13570 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
13580 20 7d 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a   }.        i++;.
13590 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b          aOffset[
135a0 69 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20  i] = offset;.   
135b0 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
135c0 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
135d0 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   );.      pC->nH
135e0 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
135f0 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
13600 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
13610 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
13620 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
13630 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
13640 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
13650 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20  (&sMem);.       
13660 20 73 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45   sMem.flags = ME
13670 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a  M_Null;.      }.
13680 20 20 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20    .      /* The 
13690 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70  record is corrup
136a0 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  t if any of the 
136b0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72  following are tr
136c0 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29  ue:.      ** (1)
136d0 20 74 68 65 20 62 79 74 65 73 20 6f 66 20 74 68   the bytes of th
136e0 65 20 68 65 61 64 65 72 20 65 78 74 65 6e 64 20  e header extend 
136f0 70 61 73 74 20 74 68 65 20 64 65 63 6c 61 72 65  past the declare
13700 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20  d header size.  
13710 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
13720 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 29 0a 20  (zHdr>zEndHdr). 
13730 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20       ** (2) the 
13740 65 6e 74 69 72 65 20 68 65 61 64 65 72 20 77 61  entire header wa
13750 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61  s used but not a
13760 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73 65 64  ll data was used
13770 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
13780 20 20 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64     (zHdr==zEndHd
13790 72 20 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d  r && offset!=pC-
137a0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
137b0 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
137c0 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
137d0 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
137e0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
137f0 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2a 20 20 20  ord..      **   
13800 20 20 20 20 20 20 20 28 6f 66 66 73 65 74 20 3e         (offset >
13810 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13820 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ).      */.     
13830 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64   if( (zHdr>=zEnd
13840 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e  Hdr && (zHdr>zEn
13850 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 21 3d  dHdr || offset!=
13860 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
13870 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66  ).       || (off
13880 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  set > pC->payloa
13890 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
138a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
138b0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
138c0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
138d0 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
138e0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
138f0 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
13900 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e  rying to extra n
13910 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ew entries from 
13920 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72  the header, nHdr
13930 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a  Parsed is.    **
13940 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f   still not up to
13950 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20   p2, that means 
13960 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
13970 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70  has fewer than p
13980 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  2.    ** columns
13990 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74  .  So the result
139a0 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
139b0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
139c0 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  e or a NULL..   
139d0 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
139e0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
139f0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
13a00 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
13a10 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
13a20 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
13a30 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
13a40 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
13a50 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  atic);.      }el
13a60 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
13a70 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13a80 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
13a90 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  }.      goto op_
13aa0 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
13ab0 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72  }.  }..  /* Extr
13ac0 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  act the content 
13ad0 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20  for the p2+1-th 
13ae0 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c  column.  Control
13af0 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72   can only.  ** r
13b00 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20  each this point 
13b10 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  if aOffset[p2], 
13b20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61  aOffset[p2+1], a
13b30 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d  nd pC->aType[p2]
13b40 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61   are.  ** all va
13b50 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  lid..  */.  asse
13b60 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50  rt( p2<pC->nHdrP
13b70 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72  arsed );.  asser
13b80 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
13b90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
13ba0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
13bb0 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73  mInvariants(pDes
13bc0 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65  t) );.  if( Vdbe
13bd0 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74  MemDynamic(pDest
13be0 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ) ) sqlite3VdbeM
13bf0 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
13c00 3b 0a 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70  ;.  t = pC->aTyp
13c10 65 5b 70 32 5d 3b 0a 20 20 69 66 28 20 70 43 2d  e[p2];.  if( pC-
13c20 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
13c30 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
13c40 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
13c50 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
13c60 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
13c70 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
13c80 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
13c90 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
13ca0 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
13cb0 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
13cc0 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  e */.    sqlite3
13cd0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 70 43  VdbeSerialGet(pC
13ce0 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70  ->aRow+aOffset[p
13cf0 32 5d 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  2], t, pDest);. 
13d00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
13d10 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65  his branch happe
13d20 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e  ns only when con
13d30 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66  tent is on overf
13d40 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20  low pages */.   
13d50 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26   if( ((pOp->p5 &
13d60 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41   (OPFLAG_LENGTHA
13d70 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  RG|OPFLAG_TYPEOF
13d80 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20  ARG))!=0.       
13d90 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26     && ((t>=12 &&
13da0 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70   (t&1)==0) || (p
13db0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
13dc0 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a  TYPEOFARG)!=0)).
13dd0 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73       || (len = s
13de0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
13df0 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20  TypeLen(t))==0. 
13e00 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43     ){.      /* C
13e10 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65  ontent is irrele
13e20 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a  vant for.      *
13e30 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65  *    1. the type
13e40 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  of() function,. 
13e50 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68       **    2. th
13e60 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63  e length(X) func
13e70 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62  tion if X is a b
13e80 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a  lob, and.      *
13e90 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63  *    3. if the c
13ea0 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73  ontent length is
13eb0 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20   zero..      ** 
13ec0 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77  So we might as w
13ed0 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f  ell use bogus co
13ee0 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61  ntent rather tha
13ef0 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20  n reading.      
13f00 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  ** content from 
13f10 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c  disk.  NULL will
13f20 20 77 6f 72 6b 20 66 6f 72 20 74 68 65 20 76 61   work for the va
13f30 6c 75 65 20 66 6f 72 20 73 74 72 69 6e 67 73 0a  lue for strings.
13f40 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f        ** and blo
13f50 62 73 20 61 6e 64 20 77 68 61 74 65 76 65 72 20  bs and whatever 
13f60 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61  is in the payloa
13f70 64 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65  dSize64 variable
13f80 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77  .      ** will w
13f90 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69  ork for everythi
13fa0 6e 67 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20  ng else. */.    
13fb0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
13fc0 69 61 6c 47 65 74 28 74 3c 3d 31 33 20 3f 20 28  ialGet(t<=13 ? (
13fd0 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65  u8*)&payloadSize
13fe0 36 34 20 3a 20 30 2c 20 74 2c 20 70 44 65 73 74  64 : 0, t, pDest
13ff0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
14000 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
14010 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
14020 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
14030 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69  p2], len, !pC->i
14040 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20  sTable,.        
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 20 20 20 20 20 20 20 20 20 20 70 44 65 73 74             pDest
14070 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
14080 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
14090 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
140a0 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20  lumn_error;.    
140b0 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
140c0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
140d0 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d  const u8*)pDest-
140e0 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  >z, t, pDest);. 
140f0 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
14100 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b  s &= ~MEM_Ephem;
14110 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65  .    }.  }.  pDe
14120 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  st->enc = encodi
14130 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  ng;..op_column_o
14140 75 74 3a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  ut:.  /* If the 
14150 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20  column value is 
14160 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  an ephemeral str
14170 69 6e 67 2c 20 67 6f 20 61 68 65 61 64 20 61 6e  ing, go ahead an
14180 64 20 70 65 72 73 69 73 74 0a 20 20 2a 2a 20 74  d persist.  ** t
14190 68 61 74 20 73 74 72 69 6e 67 20 69 6e 20 63 61  hat string in ca
141a0 73 65 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f  se the cursor mo
141b0 76 65 73 20 62 65 66 6f 72 65 20 74 68 65 20 63  ves before the c
141c0 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20  olumn value is. 
141d0 20 2a 2a 20 75 73 65 64 2e 20 20 54 68 65 20 66   ** used.  The f
141e0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f  ollowing code do
141f0 65 73 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e  es the equivalen
14200 74 20 6f 66 20 44 65 65 70 68 65 6d 65 72 61 6c  t of Deephemeral
14210 69 7a 65 28 29 0a 20 20 2a 2a 20 62 75 74 20 64  ize().  ** but d
14220 6f 65 73 20 69 74 20 66 61 73 74 65 72 2e 20 2a  oes it faster. *
14230 2f 0a 20 20 69 66 28 20 28 70 44 65 73 74 2d 3e  /.  if( (pDest->
14240 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65  flags & MEM_Ephe
14250 6d 29 21 3d 30 20 26 26 20 70 44 65 73 74 2d 3e  m)!=0 && pDest->
14260 7a 20 29 7b 0a 20 20 20 20 66 78 20 3d 20 70 44  z ){.    fx = pD
14270 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  est->flags & (ME
14280 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b  M_Str|MEM_Blob);
14290 0a 20 20 20 20 61 73 73 65 72 74 28 20 66 78 21  .    assert( fx!
142a0 3d 30 20 29 3b 0a 20 20 20 20 7a 44 61 74 61 20  =0 );.    zData 
142b0 3d 20 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65  = (const u8*)pDe
142c0 73 74 2d 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d  st->z;.    len =
142d0 20 70 44 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69   pDest->n;.    i
142e0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
142f0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
14300 70 44 65 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20  pDest, len+2) ) 
14310 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
14320 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a   memcpy(pDest->z
14330 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20  , zData, len);. 
14340 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d     pDest->z[len]
14350 20 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d   = 0;.    pDest-
14360 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
14370 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
14380 3d 20 66 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  = fx|MEM_Term;. 
14390 20 7d 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72   }.op_column_err
143a0 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  or:.  UPDATE_MAX
143b0 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
143c0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
143d0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
143e0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
143f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
14400 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
14410 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66  .** Synopsis: af
14420 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29  finity(r[P1@P2])
14430 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
14440 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
14450 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
14460 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
14470 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
14480 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
14490 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
144a0 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
144b0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
144c0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
144d0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
144e0 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
144f0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
14500 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
14510 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
14520 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
14530 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
14540 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
14550 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
14560 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
14570 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
14580 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
14590 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
145a0 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
145b0 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
145c0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
145d0 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
145e0 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
145f0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
14600 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
14610 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
14620 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
14630 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
14640 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
14650 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
14660 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e  = &p->aMem[(p->n
14670 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
14680 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
14690 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
146a0 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   );.    applyAff
146b0 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66  inity(pIn1, cAff
146c0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
146d0 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
146e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
146f0 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
14700 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
14710 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
14720 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a  mkrec(r[P1@P2]).
14730 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32  **.** Convert P2
14740 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
14750 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74  ning with P1 int
14760 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f  o the [record fo
14770 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20  rmat].** use as 
14780 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e  a data record in
14790 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
147a0 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a  e or as a key.**
147b0 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54   in an index.  T
147c0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
147d0 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74  ode can decode t
147e0 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e  he record later.
147f0 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
14800 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
14810 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
14820 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63  long.  The nth c
14830 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
14840 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
14850 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
14860 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
14870 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
14880 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64  the nth.** field
14890 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
148a0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70  y..**.** The map
148b0 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63  ping from charac
148c0 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20  ter to affinity 
148d0 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20  is given by the 
148e0 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d  SQLITE_AFF_.** m
148f0 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e  acros defined in
14900 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a   sqliteInt.h..**
14910 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c  .** If P4 is NUL
14920 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78  L then all index
14930 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65   fields have the
14940 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a   affinity NONE..
14950 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52  */.case OP_MakeR
14960 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a  ecord: {.  u8 *z
14970 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20  NewRecord;      
14980 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f    /* A buffer to
14990 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66   hold the data f
149a0 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
149b0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63  d */.  Mem *pRec
149c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
149d0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
149e0 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20  */.  u64 nData; 
149f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14a00 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
14a10 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
14a20 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20    int nHdr;     
14a30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14a40 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
14a50 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
14a60 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20   i64 nByte;     
14a70 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20          /* Data 
14a80 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
14a90 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a  or this record *
14aa0 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
14ab0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14ac0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
14ad0 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
14ae0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14af0 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20   int nVarint;   
14b00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14b10 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20  r of bytes in a 
14b20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20  varint */.  u32 
14b30 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20  serial_type;    
14b40 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64     /* Type field
14b50 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61   */.  Mem *pData
14b60 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
14b70 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62  First field to b
14b80 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20  e combined into 
14b90 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
14ba0 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20  Mem *pLast;     
14bb0 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66         /* Last f
14bc0 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f  ield of the reco
14bd0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  rd */.  int nFie
14be0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ld;            /
14bf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
14c00 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
14c10 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
14c20 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20  inity;       /* 
14c30 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72  The affinity str
14c40 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ing for the reco
14c50 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65  rd */.  int file
14c60 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f  _format;       /
14c70 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f  * File format to
14c80 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e   use for encodin
14c90 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  g */.  int i;   
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14cb0 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a   Space used in z
14cc0 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64  NewRecord[] head
14cd0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  er */.  int j;  
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14cf0 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
14d00 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e  zNewRecord[] con
14d10 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  tent */.  int le
14d20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
14d30 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20   /* Length of a 
14d40 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41  field */..  /* A
14d50 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
14d60 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
14d70 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
14d80 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
14d90 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
14da0 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
14db0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14dc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14dd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14de0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14df0 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
14e00 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
14e10 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
14e20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
14e30 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
14e40 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
14e50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
14e90 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
14ea0 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
14eb0 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
14ec0 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
14ed0 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
14ee0 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a  * and so forth..
14ef0 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
14f00 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
14f10 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
14f20 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
14f30 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
14f40 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
14f50 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
14f60 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14f70 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
14f80 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
14f90 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
14fa0 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
14fb0 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
14fc0 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
14fd0 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
14fe0 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44  data0..  */.  nD
14ff0 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
15000 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
15010 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
15020 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b  e */.  nHdr = 0;
15030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15040 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
15050 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
15060 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20    nZero = 0;    
15070 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15080 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
15090 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
150a0 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c  ecord */.  nFiel
150b0 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  d = pOp->p1;.  z
150c0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
150d0 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
150e0 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d  nField>0 && pOp-
150f0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
15100 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65  +nField<=(p->nMe
15110 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
15120 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
15130 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
15140 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
15150 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
15160 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
15170 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
15180 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
15190 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
151a0 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
151b0 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
151c0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
151d0 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
151e0 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
151f0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
15200 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
15210 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
15220 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
15230 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73  Apply the reques
15240 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ted affinity to 
15250 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a  all inputs.  */.
15260 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
15270 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28  <=pLast );.  if(
15280 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20   zAffinity ){.  
15290 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
152a0 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61  .    do{.      a
152b0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
152c0 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79  c++, *(zAffinity
152d0 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ++), encoding);.
152e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a 41        assert( zA
152f0 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c  ffinity[0]==0 ||
15300 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a   pRec<=pLast );.
15310 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66      }while( zAff
15320 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a  inity[0] );.  }.
15330 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75  .  /* Loop throu
15340 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  gh the elements 
15350 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75  that will make u
15360 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  p the record to 
15370 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20  figure.  ** out 
15380 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69  how much space i
15390 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  s required for t
153a0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20  he new record.. 
153b0 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61   */.  pRec = pLa
153c0 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73  st;.  do{.    as
153d0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
153e0 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52  (pRec) );.    pR
153f0 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69  ec->uTemp = seri
15400 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
15410 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
15420 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
15430 74 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71  t);.    len = sq
15440 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15450 79 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  ypeLen(serial_ty
15460 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
15470 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
15480 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
15490 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
154a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
154b0 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
154c0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
154d0 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20         nZero += 
154e0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
154f0 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52         len -= pR
15500 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
15510 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e     }.    }.    n
15520 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20  Data += len;.   
15530 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
15540 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20  l_type==127 );. 
15550 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
15560 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b  ial_type==128 );
15570 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72  .    nHdr += ser
15580 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20  ial_type<=127 ? 
15590 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e  1 : sqlite3Varin
155a0 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
155b0 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d  );.  }while( (--
155c0 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b  pRec)>=pData0 );
155d0 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d  ..  /* EVIDENCE-
155e0 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34  OF: R-22564-1164
155f0 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67  7 The header beg
15600 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ins with a singl
15610 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68  e varint.  ** wh
15620 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
15630 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
15640 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
15650 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69  header. The vari
15660 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73  nt.  ** value is
15670 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
15680 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73   header in bytes
15690 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73   including the s
156a0 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  ize varint.  ** 
156b0 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73  itself. */.  tes
156c0 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36  tcase( nHdr==126
156d0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
156e0 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69  nHdr==127 );.  i
156f0 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a  f( nHdr<=126 ){.
15700 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f      /* The commo
15710 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48  n case */.    nH
15720 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65  dr += 1;.  }else
15730 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61  {.    /* Rare ca
15740 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c  se of a really l
15750 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20  arge header */. 
15760 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c     nVarint = sql
15770 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
15780 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  dr);.    nHdr +=
15790 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66   nVarint;.    if
157a0 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
157b0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
157c0 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20   ) nHdr++;.  }. 
157d0 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
157e0 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ata;.  if( nByte
157f0 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
15800 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
15810 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
15820 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
15830 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
15840 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
15850 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
15860 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
15870 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
15880 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
15890 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
158a0 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
158b0 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
158c0 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
158d0 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
158e0 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
158f0 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
15900 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
15910 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75  rAndResize() cou
15920 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
15930 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
15940 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
15950 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
15960 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
15970 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
15980 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  e) ){.    goto n
15990 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
159a0 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
159b0 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
159c0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
159d0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
159e0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
159f0 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48   nHdr);.  j = nH
15a00 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  dr;.  assert( pD
15a10 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
15a20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
15a30 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c    do{.    serial
15a40 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54  _type = pRec->uT
15a50 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44  emp;.    /* EVID
15a60 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39  ENCE-OF: R-06529
15a70 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67  -47362 Following
15a80 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
15a90 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   are one or more
15aa0 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e  .    ** addition
15ab0 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20  al varints, one 
15ac0 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  per column. */. 
15ad0 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
15ae0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
15af0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
15b00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15b10 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
15b20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
15b30 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38  F: R-64536-51728
15b40 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20   The values for 
15b50 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
15b60 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a  he record.    **
15b70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
15b80 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20  low the header. 
15b90 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69  */.    j += sqli
15ba0 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74  te3VdbeSerialPut
15bb0 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c  (&zNewRecord[j],
15bc0 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79   pRec, serial_ty
15bd0 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20  pe); /* content 
15be0 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b  */.  }while( (++
15bf0 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a  pRec)<=pLast );.
15c00 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64    assert( i==nHd
15c10 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a  r );.  assert( j
15c20 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73  ==nByte );..  as
15c30 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
15c40 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
15c50 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
15c60 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20   );.  pOut->n = 
15c70 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
15c80 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
15c90 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72  Blob;.  if( nZer
15ca0 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
15cb0 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
15cc0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
15cd0 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
15ce0 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
15cf0 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
15d00 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
15d10 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
15d20 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
15d30 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
15d40 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
15d50 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
15d60 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
15d70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
15d80 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
15d90 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
15da0 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a  : r[P2]=count().
15db0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
15dc0 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
15dd0 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
15de0 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
15df0 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
15e00 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
15e10 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
15e20 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
15e30 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
15e40 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
15e50 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
15e60 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
15e70 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
15e80 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
15e90 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70  sr;..  pCrsr = p
15ea0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
15eb0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  ->pCursor;.  ass
15ec0 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
15ed0 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
15ee0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
15ef0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
15f00 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
15f10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
15f20 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
15f30 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74  &nEntry);.  pOut
15f40 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
15f50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
15f60 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
15f70 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
15f80 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
15f90 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
15fa0 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
15fb0 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
15fc0 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
15fd0 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
15fe0 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
15ff0 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
16000 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
16010 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
16020 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
16030 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
16040 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
16050 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
16060 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
16070 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
16080 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
160b0 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
160c0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
160f0 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
16100 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
16110 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
16120 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
16130 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
16140 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
16150 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
16160 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
16170 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
16180 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
16190 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
161a0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
161b0 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
161c0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
161d0 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
161e0 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
161f0 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
16200 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
16210 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
16220 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
16230 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
16240 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
16250 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
16260 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
16270 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
16280 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
16290 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
162a0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
162b0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
162c0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
162d0 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
162e0 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
162f0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
16300 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
16310 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
16320 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
16330 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
16340 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
16350 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
16360 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
16370 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
16380 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
16390 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
163a0 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
163b0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
163c0 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
163d0 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
163e0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
163f0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
16400 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65   db, "cannot ope
16410 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  n savepoint - ".
16420 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
16430 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
16440 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
16450 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16460 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16470 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53  nName = sqlite3S
16480 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
16490 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
164a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
164b0 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  E.      /* This 
164c0 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20  call is Ok even 
164d0 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e  if this savepoin
164e0 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  t is actually a 
164f0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20  transaction.    
16500 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28    ** savepoint (
16510 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68  and therefore sh
16520 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20  ould not prompt 
16530 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61  xSavepoint()) ca
16540 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a  llbacks..      *
16550 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74  * If this is a t
16560 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
16570 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65  oint being opene
16580 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  d, it is guarant
16590 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61  eed.      ** tha
165a0 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e  t the db->aVTran
165b0 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70  s[] array is emp
165c0 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73  ty.  */.      as
165d0 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f  sert( db->autoCo
165e0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
165f0 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20  VTrans==0 );.   
16600 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
16610 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
16620 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
16630 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
16660 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29  +db->nSavepoint)
16670 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
16680 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
16690 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
166a0 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ror;.#endif..   
166b0 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e     /* Create a n
166c0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72  ew savepoint str
166d0 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20  ucture. */.     
166e0 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   pNew = sqlite3D
166f0 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
16700 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
16710 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
16720 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
16730 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
16740 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
16750 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
16760 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
16770 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
16780 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
16790 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
167a0 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
167b0 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
167c0 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
167d0 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
167e0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
167f0 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
16800 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
16810 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
16820 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
16830 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
16840 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
16850 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
16860 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
16870 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
16880 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
16890 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
168a0 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
168b0 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
168c0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
168d0 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
168e0 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
168f0 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
16900 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
16910 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
16920 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
16930 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
16940 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
16950 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
16960 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
16970 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
16980 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
16990 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
169a0 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
169b0 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
169c0 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
169d0 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
169e0 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
169f0 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
16a00 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
16a10 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
16a20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
16a30 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
16a40 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
16a50 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
16a60 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
16a70 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
16a80 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
16a90 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
16aa0 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
16ab0 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
16ac0 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
16ad0 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
16ae0 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
16af0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
16b00 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16b10 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75  rMsg, db, "no su
16b20 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73  ch savepoint: %s
16b30 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  ", zName);.     
16b40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
16b50 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  OR;.    }else if
16b60 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
16b70 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  >0 && p1==SAVEPO
16b80 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
16b90 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
16ba0 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
16bb0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
16bc0 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
16bd0 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
16be0 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
16bf0 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20  tatements..     
16c00 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
16c10 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16c20 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
16c30 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c       "cannot rel
16c40 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
16c50 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
16c60 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20 20  in progress".   
16c70 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d     );.      rc =
16c80 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16c90 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
16ca0 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
16cb0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
16cc0 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
16cd0 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
16ce0 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
16cf0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
16d00 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
16d10 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
16d20 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
16d30 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
16d40 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
16d50 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
16d60 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
16d70 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
16d80 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
16d90 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
16da0 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
16db0 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
16dc0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
16dd0 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73       if( (rc = s
16de0 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
16df0 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
16e00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
16e10 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
16e20 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
16e30 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
16e40 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
16e50 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16e60 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
16e70 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
16e80 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20    p->pc = pc;.  
16e90 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
16ea0 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
16eb0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
16ec0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
16ed0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
16ee0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
16ef0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
16f00 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16f10 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
16f20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
16f30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
16f40 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68         int isSch
16f50 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20  emaChange;.     
16f60 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
16f70 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
16f80 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
16f90 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
16fa0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16fb0 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ACK ){.         
16fc0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
16fd0 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  = (db->flags & S
16fe0 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
16ff0 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20  ges)!=0;.       
17000 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
17010 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
17020 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
17030 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69   sqlite3BtreeTri
17040 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e  pAllCursors(db->
17050 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20  aDb[ii].pBt,.   
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54      SQLITE_ABORT
17090 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20  _ROLLBACK,.     
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
170d0 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ==0);.          
170e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
170f0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
17100 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17110 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
17120 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17130 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
17140 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ge = 0;.        
17150 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69  }.        for(ii
17160 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
17170 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
17180 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
17190 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e  eeSavepoint(db->
171a0 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c  aDb[ii].pBt, p1,
171b0 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
171c0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
171d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
171e0 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
171f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17200 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
17210 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17220 69 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e  if( isSchemaChan
17230 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ge ){.          
17240 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
17250 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
17260 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  db);.          s
17270 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
17280 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
17290 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  n(db);.         
172a0 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62   db->flags = (db
172b0 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45  ->flags | SQLITE
172c0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b  _InternChanges);
172d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
172e0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
172f0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
17300 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
17310 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
17320 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
17330 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
17340 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
17350 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
17360 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
17370 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
17380 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
17390 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
173a0 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
173b0 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
173c0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
173d0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
173e0 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
173f0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
17400 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
17410 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
17420 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
17430 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
17440 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
17450 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
17460 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
17470 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
17480 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
17490 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
174a0 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
174b0 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
174c0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
174d0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
174e0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
174f0 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
17500 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
17510 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
17520 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
17530 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
17540 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17550 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
17560 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
17570 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
17580 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
17590 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
175a0 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
175b0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
175c0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
175d0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
175e0 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
175f0 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
17600 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
17610 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
17620 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
17630 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
17640 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
17650 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
17660 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
17670 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
17680 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
17690 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
176a0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
176b0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
176c0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  on ){.        rc
176d0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
176e0 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20  vepoint(db, p1, 
176f0 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
17700 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
17710 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
17720 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17730 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17740 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a    }..  break;.}.
17750 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
17760 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
17770 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
17780 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
17790 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
177a0 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
177b0 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
177c0 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
177d0 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
177e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
177f0 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
17800 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
17810 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
17820 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
17830 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
17840 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
17850 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
17860 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
17870 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
17880 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
17890 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
178a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
178b0 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
178c0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
178d0 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
178e0 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
178f0 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
17900 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e  back;.  int turn
17910 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64  OnAC;..  desired
17920 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
17930 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
17940 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74  k = pOp->p2;.  t
17950 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65  urnOnAC = desire
17960 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21  dAutoCommit && !
17970 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a  db->autoCommit;.
17980 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
17990 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
179a0 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
179b0 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
179c0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
179d0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
179e0 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
179f0 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
17a00 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
17a10 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
17a20 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
17a30 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
17a40 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66 20  sReader );..#if 
17a50 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  0.  if( turnOnAC
17a60 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26   && iRollback &&
17a70 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
17a80 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >1 ){.    /* If 
17a90 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17aa0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f   implements a RO
17ab0 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65 72  LLBACK and other
17ac0 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a 20   VMs are.    ** 
17ad0 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61  still running, a
17ae0 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  nd a transaction
17af0 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74 75   is active, retu
17b00 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
17b10 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68  cating.    ** th
17b20 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
17b30 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
17b40 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20  irst. .    */.  
17b50 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17b60 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17b70 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  db, "cannot roll
17b80 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
17b90 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
17ba0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17bb0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17bc0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17bd0 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
17be0 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20  .  if( turnOnAC 
17bf0 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26  && !iRollback &&
17c00 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
17c10 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  0 ){.    /* If t
17c20 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
17c30 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
17c40 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
17c50 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
17c60 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
17c70 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
17c80 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
17c90 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
17ca0 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a   first. .    */.
17cb0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
17cc0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
17cd0 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f  , db, "cannot co
17ce0 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  mmit transaction
17cf0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
17d00 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17d10 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17d20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17d30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65  ;.  }else if( de
17d40 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21  siredAutoCommit!
17d50 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  =db->autoCommit 
17d60 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c  ){.    if( iRoll
17d70 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  back ){.      as
17d80 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
17d90 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20  oCommit==1 );.  
17da0 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62      sqlite3Rollb
17db0 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54  ackAll(db, SQLIT
17dc0 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
17dd0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
17de0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
17df0 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
17e00 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
17e10 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
17e20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
17e30 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17e40 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17e50 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17e60 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
17e70 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20  toCommit;.      
17e80 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
17e90 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
17ea0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
17eb0 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
17ec0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17ed0 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
17ee0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
17ef0 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
17f00 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17f10 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
17f20 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17f30 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
17f40 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
17f50 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
17f60 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
17f70 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
17f80 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
17f90 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
17fa0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
17fb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
17fc0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
17fd0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
17fe0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17ff0 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
18000 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
18010 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20  zErrMsg, db,.   
18020 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
18030 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
18040 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
18050 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
18060 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
18070 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
18080 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
18090 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
180a0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180c0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
180d0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
180e0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
180f0 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
18100 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
18110 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
18120 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
18130 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50  nsaction P1 P2 P
18140 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65  3 P4 P5.**.** Be
18150 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
18160 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31  n on database P1
18170 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   if a transactio
18180 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  n is not already
18190 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49  .** active..** I
181a0 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
181b0 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
181c0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
181d0 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a  arted, or if a .
181e0 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74  ** read-transact
181f0 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61  ion is already a
18200 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67  ctive, it is upg
18210 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65  raded to a write
18220 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a  -transaction..**
18230 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
18240 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e  then a read-tran
18250 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
18260 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
18270 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
18280 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
18290 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
182a0 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
182b0 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
182c0 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
182d0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
182e0 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
182f0 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
18300 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
18310 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
18320 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
18330 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
18340 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
18350 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  If a write-trans
18360 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
18370 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75  d and the Vdbe.u
18380 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66  sesStmtJournal f
18390 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28  lag is.** true (
183a0 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74  this flag is set
183b0 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79   if the Vdbe may
183c0 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61   modify more tha
183d0 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61  n one row and ma
183e0 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42  y.** throw an AB
183f0 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20  ORT exception), 
18400 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
18410 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f  saction may also
18420 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d   be opened..** M
18430 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79  ore specifically
18440 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
18450 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
18460 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61  ned iff the data
18470 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
18480 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
18490 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  not in autocommi
184a0 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68  t mode, or if th
184b0 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a  ere are other.**
184c0 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
184d0 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20  ts. A statement 
184e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f  transaction allo
184f0 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d  ws the changes m
18500 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56  ade by this.** V
18510 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
18520 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
18530 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
18540 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
18550 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
18560 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
18570 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
18580 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
18590 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
185a0 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
185b0 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
185c0 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
185d0 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ts..**.** If P5!
185e0 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
185f0 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20  ode also checks 
18600 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
18610 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20  e against P3.** 
18620 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67  and the schema g
18630 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
18640 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a  r against P4..**
18650 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
18660 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
18670 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
18680 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
18690 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
186a0 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
186b0 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
186c0 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
186d0 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
186e0 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
186f0 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
18700 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
18710 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68  ema.  If the sch
18720 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e  ema.** cookie in
18730 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P3 differs from
18740 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
18750 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ie in the databa
18760 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20  se header or.** 
18770 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  if the schema ge
18780 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
18790 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66   in P4 differs f
187a0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a  rom the current.
187b0 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
187c0 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53  unter, then an S
187d0 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72  QLITE_SCHEMA err
187e0 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64  or is raised and
187f0 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61   execution.** ha
18800 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65  lts.  The sqlite
18810 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72  3_step() wrapper
18820 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
18830 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74  then reprepare t
18840 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  he.** statement 
18850 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f  and rerun it fro
18860 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  m the beginning.
18870 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
18880 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
18890 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69  ee *pBt;.  int i
188a0 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e  Meta;.  int iGen
188b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
188c0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
188d0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
188e0 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32  ly==0 || pOp->p2
188f0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
18900 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
18910 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
18920 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
18930 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
18940 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
18950 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
18960 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  & (db->flags & S
18970 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29  QLITE_QueryOnly)
18980 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  !=0 ){.    rc = 
18990 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b  SQLITE_READONLY;
189a0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
189b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
189c0 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  }.  pBt = db->aD
189d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
189e0 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20  .  if( pBt ){.  
189f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
18a00 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42  reeBeginTrans(pB
18a10 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  t, pOp->p2);.   
18a20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
18a30 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
18a40 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20  >pc = pc;.      
18a50 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
18a60 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
18a70 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18a80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
18a90 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18aa0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
18ab0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18ac0 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
18ad0 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
18ae0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
18af0 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
18b00 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
18b10 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
18b20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
18b30 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
18b40 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
18b50 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
18b60 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
18b70 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
18b80 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
18b90 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
18ba0 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
18bb0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
18bc0 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
18bd0 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
18be0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
18bf0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
18c00 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
18c10 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18c20 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
18c30 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
18c40 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
18c50 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
18c60 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
18c70 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18c80 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
18c90 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
18ca0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
18cb0 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
18cc0 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
18cd0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
18ce0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
18cf0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
18d00 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
18d10 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
18d20 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
18d30 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
18d40 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
18d50 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
18d60 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
18d70 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
18d80 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
18d90 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
18da0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
18db0 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
18dc0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
18dd0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
18de0 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
18df0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
18e00 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
18e10 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49  ecking:.    ** I
18e20 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
18e30 3a 20 52 2d 33 32 31 39 35 2d 31 39 34 36 35 20  : R-32195-19465 
18e40 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  The schema versi
18e50 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 53 51  on is used by SQ
18e60 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65 61 63 68  Lite.    ** each
18e70 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73   time a query is
18e80 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73   executed to ens
18e90 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ure that the int
18ea0 65 72 6e 61 6c 20 63 61 63 68 65 20 6f 66 20 74  ernal cache of t
18eb0 68 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  he.    ** schema
18ec0 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
18ed0 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
18ee0 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
18ef0 63 68 65 6d 61 20 6f 66 20 74 68 65 0a 20 20 20  chema of the.   
18f00 20 2a 2a 20 64 61 74 61 62 61 73 65 20 61 67 61   ** database aga
18f10 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63  inst which the c
18f20 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73  ompiled query is
18f30 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
18f40 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ed..    */.    s
18f50 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
18f60 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
18f70 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
18f80 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
18f90 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
18fa0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
18fb0 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
18fc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65    }else{.    iGe
18fd0 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20  n = iMeta = 0;. 
18fe0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
18ff0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
19000 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
19010 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
19020 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70  5 && (iMeta!=pOp
19030 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p3 || iGen!=pO
19040 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20  p->p4.i) ){.    
19050 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
19060 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
19070 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
19080 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
19090 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
190a0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
190b0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
190c0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
190d0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
190e0 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
190f0 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
19100 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
19110 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
19120 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
19130 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
19140 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
19150 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
19160 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19170 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
19180 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
19190 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
191a0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
191b0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
191c0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
191d0 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
191e0 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
191f0 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
19200 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
19210 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
19220 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
19230 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
19240 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
19250 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
19260 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
19270 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
19280 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
19290 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
192a0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
192b0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
192c0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
192d0 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
192e0 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
192f0 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
19300 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
19310 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
19320 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
19330 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
19340 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
19350 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
19360 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
19370 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
19380 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
19390 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
193a0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
193b0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
193c0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
193d0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
193e0 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
193f0 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
19400 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
19410 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19420 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
19430 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19440 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
19450 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
19460 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
19470 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
19480 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
19490 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
194a0 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
194b0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
194c0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
194d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
194e0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
194f0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
19500 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
19510 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
19520 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
19530 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19540 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
19550 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
19560 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
19570 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
19580 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
19590 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
195a0 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
195b0 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
195c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
195d0 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
195e0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
195f0 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
19600 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
19610 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
19620 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
19630 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19650 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
19660 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
19670 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
19680 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61  nt iCookie;..  a
19690 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
196a0 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70  der );.  iDb = p
196b0 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69  Op->p1;.  iCooki
196c0 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  e = pOp->p3;.  a
196d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
196e0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
196f0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
19700 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
19710 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
19720 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
19730 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
19740 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
19750 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
19760 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  ) );..  sqlite3B
19770 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e  treeGetMeta(db->
19780 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43  aDb[iDb].pBt, iC
19790 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
197a0 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
197b0 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
197c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
197d0 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
197e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
197f0 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
19800 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
19810 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
19820 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
19830 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
19840 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
19850 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20  e P1.  P2==1 is 
19860 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
19870 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69  on.  .** P2==2 i
19880 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
19890 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20  ormat. P2==3 is 
198a0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
198b0 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
198c0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
198d0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
198e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
198f0 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
19900 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
19910 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
19920 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
19930 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
19940 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
19950 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
19960 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
19970 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
19980 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
19990 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
199a0 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
199b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
199c0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
199d0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
199e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
199f0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
19a00 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
19a10 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
19a20 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
19a30 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
19a40 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
19a50 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
19a60 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
19a70 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
19a80 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
19a90 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
19aa0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
19ab0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
19ac0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
19ad0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
19ae0 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
19af0 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
19b00 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
19b10 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
19b20 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
19b30 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
19b40 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
19b50 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
19b60 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
19b70 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
19b80 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
19b90 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
19ba0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
19bb0 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
19bc0 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
19bd0 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
19be0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
19bf0 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
19c00 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
19c10 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
19c20 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
19c30 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
19c40 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
19c50 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
19c60 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
19c70 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
19c80 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
19c90 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
19ca0 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
19cb0 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
19cc0 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
19cd0 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
19ce0 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
19cf0 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
19d00 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
19d10 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
19d20 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
19d30 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
19d40 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
19d50 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
19d60 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
19d70 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
19d80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19d90 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
19da0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19db0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
19dc0 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
19dd0 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
19de0 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
19df0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
19e00 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
19e10 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
19e20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
19e30 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19e40 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
19e50 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
19e60 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
19e70 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
19e80 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
19e90 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
19ea0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
19eb0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
19ec0 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
19ed0 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
19ee0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
19ef0 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
19f00 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
19f10 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
19f20 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
19f30 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
19f40 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
19f50 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
19f60 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
19f70 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
19f80 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
19f90 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
19fa0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
19fb0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
19fc0 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
19fd0 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
19fe0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
19ff0 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
1a000 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
1a010 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
1a020 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
1a030 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
1a040 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
1a050 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
1a060 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
1a070 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
1a080 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
1a090 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
1a0a0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
1a0b0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1a0c0 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
1a0d0 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
1a0e0 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
1a0f0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
1a100 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
1a110 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
1a120 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
1a130 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1a140 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
1a150 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
1a160 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
1a170 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
1a180 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
1a190 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
1a1a0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
1a1b0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
1a1c0 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
1a1d0 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
1a1e0 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
1a1f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1a200 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1a210 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1a220 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1a230 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1a240 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1a250 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1a260 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1a270 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1a280 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1a290 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1a2a0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1a2b0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1a2c0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1a2d0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1a2e0 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1a2f0 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1a300 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1a310 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1a320 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1a330 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1a340 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1a350 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1a360 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1a370 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1a380 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1a390 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1a3a0 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1a3b0 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1a3c0 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65  x opcode works e
1a3d0 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64  xactly like Read
1a3e0 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74  Open except that
1a3f0 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1a400 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1a410 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1a420 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77  s already open w
1a430 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  ith a root page.
1a440 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20  ** number of P2 
1a450 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1a460 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1a470 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1a480 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1a490 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1a4a0 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1a4b0 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1a4c0 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1a4d0 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1a4e0 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1a4f0 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50  P5==0 and with P
1a500 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f  4 being.** a P4_
1a510 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1a520 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1a530 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1a540 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a  be the same as.*
1a550 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  * every other Re
1a560 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1a570 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1a580 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a   cursor number..
1a590 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70  **.** See the Op
1a5a0 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f  enRead opcode do
1a5b0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1a5c0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1a5d0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
1a5e0 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1a5f0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1a600 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1a610 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1a620 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1a630 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1a640 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1a650 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1a660 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1a670 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1a680 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1a690 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1a6a0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1a6b0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1a6c0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1a6d0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1a6e0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1a6f0 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1a700 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1a710 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1a720 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1a730 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1a740 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1a750 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1a760 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1a770 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1a780 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1a790 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1a7a0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1a7b0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1a7c0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1a7d0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1a7e0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1a7f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1a800 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1a810 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1a820 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1a830 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1a840 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1a850 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1a860 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1a870 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1a880 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1a890 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1a8a0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1a8b0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1a8c0 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1a8d0 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1a8e0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1a8f0 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1a900 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1a910 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1a920 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1a930 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1a940 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1a950 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1a960 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1a970 75 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ur;..  assert( p
1a980 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61  Op->p5==0 );.  a
1a990 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1a9a0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1a9b0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
1a9c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1a9d0 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72  if( pCur && pCur
1a9e0 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32  ->pgnoRoot==(u32
1a9f0 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  )pOp->p2 ){.    
1aa00 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44  assert( pCur->iD
1aa10 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20  b==pOp->p3 );   
1aa20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64     /* Guaranteed
1aa30 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e   by the code gen
1aa40 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 62 72  erator */.    br
1aa50 65 61 6b 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  eak;.  }.  /* If
1aa60 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1aa70 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1aa80 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1aa90 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1aaa0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1aab0 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1aac0 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1aad0 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1aae0 7d 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  }.case OP_OpenRe
1aaf0 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1ab00 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
1ab10 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1ab20 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1ab30 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1ab40 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1ab50 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1ab60 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1ab70 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1ab80 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28  sert( (pOp->p5&(
1ab90 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f  OPFLAG_P2ISREG|O
1aba0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d  PFLAG_BULKCSR))=
1abb0 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73  =pOp->p5 );.  as
1abc0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1abd0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1abe0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  || pOp->p5==0 );
1abf0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1ac00 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1ac10 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1ac20 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1ac30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ac40 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1ac50 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1ac60 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1ac70 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1ac80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1ac90 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20  BORT_ROLLBACK;. 
1aca0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
1acb0 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
1acc0 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
1acd0 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
1ace0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1acf0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1ad00 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1ad10 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1ad20 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1ad30 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44  sk, iDb) );.  pD
1ad40 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1ad50 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1ad60 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1ad70 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1ad80 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1ad90 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72  nWrite ){.    wr
1ada0 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73  Flag = 1;.    as
1adb0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1adc0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1add0 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1ade0 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1adf0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1ae00 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1ae10 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1ae20 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1ae30 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1ae40 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1ae50 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1ae60 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1ae70 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1ae80 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1ae90 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1aea0 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1aeb0 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1aec0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
1aed0 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1aee0 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1aef0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1af00 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1af10 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1af20 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1af30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1af40 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1af50 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1af60 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1af70 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1af80 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1af90 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1afa0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1afb0 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1afc0 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1afd0 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1afe0 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1aff0 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1b000 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1b010 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1b020 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1b030 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1b040 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1b050 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1b060 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1b070 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  ion. */.    if( 
1b080 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a  NEVER(p2<2) ) {.
1b090 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1b0a0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
1b0b0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1b0c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b0d0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70     }.  }.  if( p
1b0e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1b0f0 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1b100 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1b110 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1b120 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1b130 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1b140 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1b150 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1b160 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1b170 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70  eyInfo->nField+p
1b180 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64  KeyInfo->nXField
1b190 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1b1a0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1b1b0 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
1b1c0 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1b1d0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1b1e0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1b1f0 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29  ert( nField>=0 )
1b200 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46  ;.  testcase( nF
1b210 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54  ield==0 );  /* T
1b220 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45  able with INTEGE
1b230 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  R PRIMARY KEY an
1b240 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a  d nothing else *
1b250 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
1b260 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1b270 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1b280 62 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75  b, 1);.  if( pCu
1b290 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1b2a0 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1b2b0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1b2c0 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1b2d0 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74    pCur->pgnoRoot
1b2e0 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71   = p2;.  rc = sq
1b2f0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1b300 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
1b310 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
1b320 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  >pCursor);.  pCu
1b330 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1b340 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
1b350 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  ( OPFLAG_BULKCSR
1b360 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  ==BTREE_BULKLOAD
1b370 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72   );.  sqlite3Btr
1b380 65 65 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43  eeCursorHints(pC
1b390 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f  ur->pCursor, (pO
1b3a0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42  p->p5 & OPFLAG_B
1b3b0 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20  ULKCSR));..  /* 
1b3c0 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
1b3d0 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61  or.isTable varia
1b3e0 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65  ble. Previous ve
1b3f0 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
1b400 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
1b410 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
1b420 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
1b430 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
1b440 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
1b450 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
1b460 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
1b470 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
1b480 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
1b490 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
1b4a0 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
1b4b0 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
1b4c0 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
1b4d0 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
1b4e0 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  FO;.  break;.}..
1b4f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1b500 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1b510 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1b520 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1b530 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1b540 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1b550 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1b560 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1b570 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1b580 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1b590 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1b5a0 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1b5b0 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1b5c0 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1b5d0 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1b5e0 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1b5f0 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1b600 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
1b610 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1b620 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
1b630 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
1b640 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
1b650 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
1b660 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
1b670 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
1b680 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
1b690 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
1b6a0 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
1b6b0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
1b6c0 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
1b6d0 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
1b6e0 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
1b6f0 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
1b700 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1b710 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1b720 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1b730 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1b740 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1b750 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1b760 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1b770 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1b780 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1b790 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1b7a0 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1b7b0 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1b7c0 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1b7d0 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1b7e0 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1b7f0 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
1b800 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1b810 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
1b820 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1b830 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1b840 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1b850 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1b860 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1b870 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1b880 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1b890 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1b8a0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1b8b0 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1b8c0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1b8d0 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1b8e0 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1b8f0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1b900 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1b910 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1b920 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b930 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
1b940 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
1b950 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
1b960 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
1b970 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1b980 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
1b990 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
1b9a0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b9b0 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
1b9c0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1b9d0 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
1b9e0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1b9f0 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
1ba00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ba10 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1ba20 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1ba30 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1ba40 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1ba50 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1ba60 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1ba70 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1ba80 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1ba90 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1baa0 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1bab0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bac0 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1bad0 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1bae0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1baf0 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1bb00 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1bb10 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1bb20 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1bb30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1bb40 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1bb50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1bb60 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1bb70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1bb80 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1bb90 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1bba0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1bbb0 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1bbc0 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1bbd0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1bbe0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1bbf0 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1bc00 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1bc10 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1bc20 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1bc30 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1bc40 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1bc50 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1bc60 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1bc70 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1bc80 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1bc90 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1bca0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1bcb0 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  ( (pKeyInfo = pO
1bcc0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1bcd0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1bce0 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1bcf0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1bd00 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1bd10 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1bd20 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1bd30 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1bd40 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1bd50 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1bd60 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1bd70 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1bd80 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1bd90 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1bda0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1bdb0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1bdc0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1bdd0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1bde0 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1bdf0 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1be00 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1be10 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1be20 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1be30 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1be40 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78  1, pKeyInfo, pCx
1be50 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1be60 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1be70 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1be80 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1be90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1bea0 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d  rsor(pCx->pBt, M
1beb0 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30  ASTER_ROOT, 1, 0
1bec0 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1bed0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1bee0 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1bef0 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65   }.  pCx->isOrde
1bf00 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1bf10 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1bf20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1bf30 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1bf40 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1bf50 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1bf60 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1bf70 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1bf80 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1bf90 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1bfa0 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1bfb0 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1bfc0 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1bfd0 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1bfe0 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1bff0 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1c000 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1c010 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1c020 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1c030 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1c040 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1c050 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1c060 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1c070 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1c080 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1c090 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1c0a0 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1c0b0 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1c0c0 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1c0d0 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1c0e0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1c0f0 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1c100 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1c110 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c120 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1c130 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1c140 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1c150 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
1c160 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1c170 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1c180 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1c190 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
1c1a0 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1c1b0 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1c1c0 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1c1d0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1c1e0 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
1c1f0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1c200 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
1c210 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b  , pCx);.  break;
1c220 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1c230 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1c240 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1c250 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1c260 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1c270 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1c280 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1c290 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1c2a0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1c2b0 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1c2c0 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1c2d0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1c2e0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1c2f0 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1c300 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1c310 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1c320 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1c330 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1c340 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1c350 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c360 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1c370 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1c380 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1c390 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c3a0 43 2d 3e 70 53 6f 72 74 65 72 20 29 3b 0a 20 20  C->pSorter );.  
1c3b0 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1c3c0 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  t++)==0 ){.    p
1c3d0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c3e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c3f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c400 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1c410 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1c420 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1c430 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1c440 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1c450 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1c460 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1c470 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1c480 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1c490 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1c4a0 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1c4b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1c4c0 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1c4d0 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1c4e0 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1c4f0 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1c500 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1c510 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1c520 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1c530 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1c540 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1c550 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1c560 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1c570 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1c580 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1c590 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1c5a0 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1c5b0 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1c5c0 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1c5d0 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1c5e0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1c5f0 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1c600 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1c610 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1c620 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1c630 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1c640 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1c650 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1c660 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1c670 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1c680 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1c690 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1c6a0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1c6b0 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1c6c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1c6d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c6e0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1c6f0 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1c700 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1c710 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1c720 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1c730 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1c740 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1c750 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1c760 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1c770 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1c780 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1c790 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1c7a0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1c7b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c7c0 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1c7d0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1c7e0 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1c7f0 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1c800 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1c810 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1c820 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1c830 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1c840 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1c850 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1c860 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c870 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c880 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1c890 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1c8a0 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1c8b0 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1c8c0 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1c8d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c8e0 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1c8f0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1c900 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1c910 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1c920 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c930 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1c940 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1c950 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1c960 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1c970 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1c980 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1c990 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1c9a0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1c9b0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1c9c0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1c9d0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1c9e0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1c9f0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1ca00 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1ca10 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1ca20 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1ca30 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1ca40 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1ca50 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1ca60 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1ca70 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1ca80 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1ca90 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1caa0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1cab0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1cac0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1cad0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1cae0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1caf0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1cb00 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1cb10 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1cb20 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1cb30 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1cb40 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1cb50 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1cb60 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1cb70 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1cb80 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1cb90 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1cba0 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1cbb0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1cbc0 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1cbd0 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
1cbe0 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
1cbf0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1cc00 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1cc10 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1cc20 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1cc30 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1cc40 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1cc50 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1cc60 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1cc70 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1cc80 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1cc90 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1cca0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1ccb0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1ccc0 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1ccd0 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1cce0 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1ccf0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1cd00 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1cd10 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1cd20 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1cd30 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1cd40 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1cd50 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1cd60 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1cd70 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1cd80 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1cd90 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1cda0 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1cdb0 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1cdc0 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1cdd0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1cde0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1cdf0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1ce00 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1ce10 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1ce20 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1ce30 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
1ce40 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
1ce50 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1ce60 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1ce70 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
1ce80 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
1ce90 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1cea0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
1ceb0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1cec0 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1ced0 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
1cee0 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
1cef0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1cf00 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1cf10 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1cf20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1cf30 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1cf40 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1cf50 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1cf60 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1cf70 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1cf80 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1cf90 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1cfa0 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1cfb0 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1cfc0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1cfd0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1cfe0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1cff0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1d000 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1d010 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1d020 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1d030 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1d040 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1d050 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1d060 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1d070 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1d080 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1d090 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1d0a0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1d0b0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1d0c0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1d0d0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1d0e0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1d0f0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1d100 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1d110 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1d120 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1d130 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1d140 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1d150 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1d160 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1d170 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1d180 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1d190 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1d1a0 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1d1b0 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
1d1c0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1d1d0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1d1e0 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1d1f0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1d200 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1d210 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1d220 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1d230 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1d240 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1d250 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1d260 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1d270 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1d280 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1d290 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1d2a0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d2b0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1d2c0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1d2d0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1d2e0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1d2f0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1d300 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1d310 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1d320 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1d330 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1d340 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1d350 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d360 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1d370 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1d380 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1d390 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1d3a0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1d3b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1d3c0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1d3d0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1d3e0 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
1d3f0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1d400 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
1d410 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
1d420 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1d430 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1d440 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1d450 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
1d460 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1d470 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1d480 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
1d490 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1d4a0 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1d4b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d4c0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1d4d0 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1d4e0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1d4f0 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1d500 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d510 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1d520 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1d530 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1d540 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
1d550 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d560 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
1d570 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
1d580 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
1d590 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
1d5a0 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1d5b0 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
1d5c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d5d0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d5e0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1d5f0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1d600 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1d610 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1d620 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1d630 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1d640 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1d650 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d660 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
1d670 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
1d680 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
1d690 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
1d6a0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
1d6b0 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
1d6c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d6d0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
1d6e0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1d6f0 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1d700 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70  pOp->opcode;.  p
1d710 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1d720 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d730 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1d740 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1d750 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d  #endif.  if( pC-
1d760 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
1d770 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1d780 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1d790 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1d7a0 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1d7b0 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
1d7c0 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1d7d0 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1d7e0 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1d7f0 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1d800 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1d810 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20  convert it. */. 
1d820 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b     pIn3 = &aMem[
1d830 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66  pOp->p3];.    if
1d840 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1d850 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
1d860 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
1d870 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61  M_Str ){.      a
1d880 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1d890 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20  ity(pIn3, 0);.  
1d8a0 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73    }.    iKey = s
1d8b0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
1d8c0 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f  ue(pIn3);..    /
1d8d0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1d8e0 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63  e could not be c
1d8f0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1d900 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
1d910 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20  .    ** loss of 
1d920 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  information, the
1d930 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73  n special proces
1d940 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64  sing is required
1d950 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  ... */.    if( (
1d960 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1d970 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
1d980 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1d990 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ags & MEM_Real)=
1d9a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
1d9b0 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1d9c0 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
1d9d0 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69  rted into any ki
1d9e0 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a  nd of a number,.
1d9f0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
1da00 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20  the seek is not 
1da10 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d  possible, so jum
1da20 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20  p to P2 */.     
1da30 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1da40 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
1da50 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20  Taken(1,2);.    
1da60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1da70 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1da80 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1da90 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
1daa0 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1dab0 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1dac0 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1dad0 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
1dae0 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
1daf0 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
1db00 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
1db10 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
1db20 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
1db30 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
1db40 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1db50 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
1db60 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
1db70 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1db80 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
1db90 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
1dba0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
1dbb0 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65  In3->u.r<(double
1dbc0 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1dbd0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1dbe0 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31  GE==(OP_SeekGT-1
1dbf0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1dc00 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d  ert( OP_SeekLT==
1dc10 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b  (OP_SeekLE-1) );
1dc20 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1dc30 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78   (OP_SeekLE & 0x
1dc40 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1dc50 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  T & 0x0001) );. 
1dc60 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1dc70 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1dc80 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
1dc90 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
1dca0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1dcb0 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1dcc0 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
1dcd0 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1dce0 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1dcf0 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1dd00 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
1dd10 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
1dd20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
1dd30 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29  n3->u.r>(double)
1dd40 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1dd50 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1dd60 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
1dd70 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1dd80 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
1dd90 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
1dda0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ddb0 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1ddc0 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
1ddd0 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1dde0 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1ddf0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1de00 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
1de10 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
1de20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
1de30 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1de40 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1de50 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1de60 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1de70 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
1de80 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
1de90 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
1dea0 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
1deb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1dec0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1ded0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1dee0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  }.  }else{.    n
1def0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1df00 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  i;.    assert( p
1df10 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1df20 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65  NT32 );.    asse
1df30 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a  rt( nField>0 );.
1df40 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
1df50 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
1df60 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
1df70 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20  16)nField;..    
1df80 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65  /* The next line
1df90 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65   of code compute
1dfa0 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e  s as follows, on
1dfb0 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a  ly faster:.    *
1dfc0 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53  *   if( oc==OP_S
1dfd0 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekGT || oc==OP_
1dfe0 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a  SeekLE ){.    **
1dff0 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72       r.default_r
1e000 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20  c = -1;.    **  
1e010 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20   }else{.    **  
1e020 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1e030 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d  = +1;.    **   }
1e040 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65  .    */.    r.de
1e050 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26  fault_rc = ((1 &
1e060 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54   (oc - OP_SeekLT
1e070 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20  )) ? -1 : +1);. 
1e080 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1e090 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65  P_SeekGT || r.de
1e0a0 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a  fault_rc==-1 );.
1e0b0 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1e0c0 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64  OP_SeekLE || r.d
1e0d0 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
1e0e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1e0f0 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e  =OP_SeekGE || r.
1e100 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29  default_rc==+1 )
1e110 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1e120 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72  !=OP_SeekLT || r
1e130 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
1e140 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  );..    r.aMem =
1e150 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
1e160 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1e170 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69  EBUG.    { int i
1e180 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e  ; for(i=0; i<r.n
1e190 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65  Field; i++) asse
1e1a0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1e1b0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a  r.aMem[i]) ); }.
1e1c0 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e  #endif.    Expan
1e1d0 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20  dBlob(r.aMem);. 
1e1e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1e1f0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
1e200 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
1e210 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
1e220 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1e230 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1e240 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1e250 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1e260 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65   }.  pC->deferre
1e270 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
1e280 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1e290 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
1e2a0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1e2b0 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
1e2c0 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
1e2d0 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53  f.  if( oc>=OP_S
1e2e0 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74  eekGE ){  assert
1e2f0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc==OP_SeekGE 
1e300 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  || oc==OP_SeekGT
1e310 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c   );.    if( res<
1e320 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1e330 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29  oc==OP_SeekGT) )
1e340 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
1e350 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1e360 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d  te3BtreeNext(pC-
1e370 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  >pCursor, &res);
1e380 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
1e390 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
1e3a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1e3b0 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
1e3c0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1e3d0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1e3e0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1e3f0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
1e400 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
1e410 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1e420 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1e430 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
1e440 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1e450 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1e460 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1e470 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1e480 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e490 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1e4a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1e4b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e4c0 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
1e4d0 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
1e4e0 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
1e4f0 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
1e500 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
1e510 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
1e520 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1e530 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
1e540 65 65 45 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f  eeEof(pC->pCurso
1e550 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
1e560 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1e570 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  0 );.  VdbeBranc
1e580 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
1e590 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20  ;.  if( res ){. 
1e5a0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
1e5b0 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
1e5c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e5d0 53 65 65 6b 20 50 31 20 50 32 20 2a 20 2a 20 2a  Seek P1 P2 * * *
1e5e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
1e5f0 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  ntkey=r[P2].**.*
1e600 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
1e610 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64  table cursor and
1e620 20 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69   P2 is a rowid i
1e630 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65  nteger.  Arrange
1e640 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f  .** for P1 to mo
1e650 76 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  ve so that it po
1e660 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69  ints to the rowi
1e670 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a  d given by P2..*
1e680 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74  *.** This is act
1e690 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64  ually a deferred
1e6a0 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20   seek.  Nothing 
1e6b0 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73  actually happens
1e6c0 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75   until.** the cu
1e6d0 72 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20  rsor is used to 
1e6e0 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20  read a record.  
1e6f0 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20  That way, if no 
1e700 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20  reads.** occur, 
1e710 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49  no unnecessary I
1e720 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63  /O happens..*/.c
1e730 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20  ase OP_Seek: {  
1e740 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
1e750 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
1e760 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e770 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1e780 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1e790 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e7a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e7b0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1e7c0 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
1e7d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e7e0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
1e7f0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1e800 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
1e810 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d  [pOp->p2];.  pC-
1e820 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1e830 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1e840 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d  lue(pIn2);.  pC-
1e850 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
1e860 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 1;.  break;.}.
1e870 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
1e880 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1e890 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e8a0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1e8b0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1e8c0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1e8d0 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1e8e0 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1e8f0 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1e900 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1e910 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1e920 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1e930 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1e940 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1e950 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
1e960 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1e970 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1e980 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1e990 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1e9a0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
1e9b0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
1e9c0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
1e9d0 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
1e9e0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1e9f0 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
1ea00 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
1ea10 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
1ea20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1ea30 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
1ea40 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  re it can be.** 
1ea50 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20  advanced in the 
1ea60 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f  forward directio
1ea70 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73  n.  The Next ins
1ea80 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f  truction will wo
1ea90 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74  rk,.** but not t
1eaa0 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  he Prev instruct
1eab0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1eac0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
1ead0 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78  oConflict, NotEx
1eae0 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a  ists. SeekGe.*/.
1eaf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
1eb00 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1eb10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1eb20 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1eb30 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1eb40 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1eb50 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1eb60 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1eb70 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1eb80 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1eb90 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1eba0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1ebb0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1ebc0 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1ebd0 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
1ebe0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1ebf0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1ec00 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1ec10 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1ec20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
1ec30 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1ec40 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1ec50 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
1ec60 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
1ec70 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
1ec80 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
1ec90 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
1eca0 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
1ecb0 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
1ecc0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1ecd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
1ece0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1ecf0 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
1ed00 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1ed10 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
1ed20 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
1ed30 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1ed40 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
1ed50 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
1ed60 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
1ed70 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
1ed80 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
1ed90 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
1eda0 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
1edb0 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
1edc0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1edd0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1ede0 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
1edf0 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
1ee00 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
1ee10 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1ee20 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1ee30 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1ee40 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1ee50 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1ee60 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1ee70 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1ee80 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1ee90 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1eea0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1eeb0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1eec0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1eed0 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1eee0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1eef0 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1ef00 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1ef10 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1ef20 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
1ef30 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
1ef40 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1ef50 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
1ef60 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
1ef70 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
1ef80 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
1ef90 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
1efa0 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
1efb0 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
1efc0 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
1efd0 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
1efe0 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
1eff0 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
1f000 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
1f010 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
1f020 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
1f030 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
1f040 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
1f050 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
1f060 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
1f070 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
1f080 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
1f090 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
1f0a0 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
1f0b0 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
1f0c0 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
1f0d0 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
1f0e0 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
1f0f0 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
1f100 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  NULL..**.** This
1f110 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1f120 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1f130 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1f140 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
1f150 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
1f160 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
1f170 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1f180 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
1f190 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
1f1a0 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
1f1b0 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
1f1c0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1f1d0 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74  ound, Found, Not
1f1e0 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f  Exists.*/.case O
1f1f0 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20  P_NoConflict:   
1f200 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f210 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
1f220 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
1f230 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f240 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
1f250 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f260 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  /.  int alreadyE
1f270 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b  xists;.  int ii;
1f280 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f290 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
1f2a0 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55  char *pFree;.  U
1f2b0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
1f2c0 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
1f2d0 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68  edRecord r;.  ch
1f2e0 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e  ar aTempRec[ROUN
1f2f0 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b  D8(sizeof(Unpack
1f300 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a  edRecord)) + siz
1f310 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b  eof(Mem)*4 + 7];
1f320 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1f330 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e  TEST.  if( pOp->
1f340 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e  opcode!=OP_NoCon
1f350 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f  flict ) sqlite3_
1f360 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  found_count++;.#
1f370 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28  endif..  assert(
1f380 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f390 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f3a0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1f3b0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1f3c0 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
1f3d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f3e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f3f0 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
1f400 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1f410 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1f420 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49  ode;.#endif.  pI
1f430 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1f440 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
1f450 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1f460 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1f470 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70  sTable==0 );.  p
1f480 46 72 65 65 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  Free = 0;  /* No
1f490 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
1f4a0 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
1f4b0 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
1f4c0 69 6e 67 2e 20 2a 2f 0a 20 20 69 66 28 20 70 4f  ing. */.  if( pO
1f4d0 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
1f4e0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1f4f0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1f500 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1f510 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
1f520 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20  .aMem = pIn3;.  
1f530 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
1f540 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
1f550 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
1f560 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1f570 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45  [ii]) );.      E
1f580 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65  xpandBlob(&r.aMe
1f590 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53  m[ii]);.#ifdef S
1f5a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1f5b0 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
1f5c0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
1f5d0 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
1f5e0 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
1f5f0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
1f600 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
1f610 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
1f620 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b  3VdbeAllocUnpack
1f630 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20  edRecord(.      
1f640 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20    pC->pKeyInfo, 
1f650 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
1f660 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72  (aTempRec), &pFr
1f670 65 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66  ee.    );.    if
1f680 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
1f690 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1f6a0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
1f6b0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
1f6c0 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
1f6d0 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69  (pIn3);.    sqli
1f6e0 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
1f6f0 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ack(pC->pKeyInfo
1f700 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d  , pIn3->n, pIn3-
1f710 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20  >z, pIdxKey);.  
1f720 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66  }.  pIdxKey->def
1f730 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69  ault_rc = 0;.  i
1f740 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1f750 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b  OP_NoConflict ){
1f760 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20  .    /* For the 
1f770 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70  OP_NoConflict op
1f780 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a  code, take the j
1f790 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68  ump if any of th
1f7a0 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66  e.    ** input f
1f7b0 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  ields are NULL, 
1f7c0 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69  since any key wi
1f7d0 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e  th a NULL will n
1f7e0 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69  ot.    ** confli
1f7f0 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69  ct */.    for(ii
1f800 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e  =0; ii<pIdxKey->
1f810 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1f820 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
1f830 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  ->aMem[ii].flags
1f840 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1f850 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1f860 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61  >p2 - 1; VdbeBra
1f870 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
1f880 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1f890 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
1f8a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f8b0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1f8c0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70  d(pC->pCursor, p
1f8d0 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
1f8e0 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  es);.  if( pOp->
1f8f0 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73  p4.i==0 ){.    s
1f900 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1f910 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69   pFree);.  }.  i
1f920 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1f930 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
1f940 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
1f950 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72  ult = res;.  alr
1f960 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
1f970 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  s==0);.  pC->nul
1f980 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79  lRow = 1-already
1f990 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65  Exists;.  pC->de
1f9a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1f9b0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1f9c0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1f9d0 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  E;.  if( pOp->op
1f9e0 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
1f9f0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
1fa00 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69  Taken(alreadyExi
1fa10 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts!=0,2);.    i
1fa20 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
1fa30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1fa40 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
1fa50 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1fa60 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d  n(alreadyExists=
1fa70 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21  =0,2);.    if( !
1fa80 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1fa90 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1faa0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1fab0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1fac0 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1fad0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1fae0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
1faf0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
1fb00 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
1fb10 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
1fb20 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
1fb30 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
1fb40 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
1fb50 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
1fb60 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
1fb70 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
1fb80 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
1fb90 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
1fba0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ely to P2.  If P
1fbb0 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
1fbc0 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20   record.** with 
1fbd0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65  rowid P3 then le
1fbe0 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
1fbf0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
1fc00 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a  record and fall.
1fc10 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ** through to th
1fc20 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1fc30 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
1fc40 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
1fc50 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
1fc60 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
1fc70 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
1fc80 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
1fc90 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
1fca0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  )..**.** This op
1fcb0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1fcc0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1fcd0 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
1fce0 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a  t be advanced.**
1fcf0 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
1fd00 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
1fd10 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
1fd20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73  and Prev opcodes
1fd30 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72   will.** not wor
1fd40 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73  k following this
1fd50 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
1fd60 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1fd70 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
1fd80 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lict.*/.case OP_
1fd90 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20  NotExists: {    
1fda0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1fdb0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1fdc0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1fdd0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
1fde0 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a  es;.  u64 iKey;.
1fdf0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1fe00 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1fe10 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1fe20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
1fe30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1fe40 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1fe50 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1fe60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1fe70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1fe80 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
1fe90 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1fea0 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65  ->seekOp = 0;.#e
1feb0 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70  ndif.  assert( p
1fec0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1fed0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1fee0 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1fef0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1ff00 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
1ff10 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
1ff20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
1ff30 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
1ff40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1ff50 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1ff60 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
1ff70 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6d  , &res);.  pC->m
1ff80 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b  ovetoTarget = iK
1ff90 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20  ey;  /* Used by 
1ffa0 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70  OP_Delete */.  p
1ffb0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1ffc0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1ffd0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1ffe0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1fff0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62  oveto = 0;.  Vdb
20000 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
20010 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
20020 73 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  s!=0 ){.    pc =
20030 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
20040 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
20050 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61  lt = res;.  brea
20060 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
20070 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
20080 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
20090 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b  s: r[P2]=cursor[
200a0 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20  P1].ctr++.**.** 
200b0 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
200c0 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
200d0 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
200e0 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
200f0 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
20100 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
20110 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
20120 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
20130 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
20140 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
20150 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
20160 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
20170 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
20180 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
20190 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
201a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
201b0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
201c0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
201d0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
201e0 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
201f0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
20200 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
20210 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
20220 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
20230 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
20240 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
20250 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
20260 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  d.**.** Get a ne
20270 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
20280 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
20290 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
202a0 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
202b0 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
202c0 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
202d0 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
202e0 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
202f0 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
20300 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
20310 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
20320 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
20330 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
20340 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
20350 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
20360 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
20370 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
20380 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
20390 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74  f this VDBE that
203a0 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c   holds .** the l
203b0 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
203c0 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  y generated reco
203d0 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65  rd number. No ne
203e0 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
203f0 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20   are.** allowed 
20400 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
20410 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e  this value. When
20420 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63   this value reac
20430 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c  hes its maximum,
20440 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46   .** an SQLITE_F
20450 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
20460 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
20470 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
20480 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
20490 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
204a0 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
204b0 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
204c0 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
204d0 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
204e0 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
204f0 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
20500 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
20510 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
20520 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
20530 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
20540 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
20550 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
20560 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
20570 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
20580 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
20590 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
205a0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
205b0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
205c0 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
205d0 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
205e0 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
205f0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
20600 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
20610 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
20620 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
20630 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
20640 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
20650 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
20660 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
20670 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
20680 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
20690 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
206a0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
206b0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
206c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
206d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
206e0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
206f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
20700 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
20710 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
20720 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
20730 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
20740 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
20750 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
20760 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
20770 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
20780 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
20790 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
207a0 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
207b0 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
207c0 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
207d0 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
207e0 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
207f0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
20800 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
20810 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
20820 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
20830 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
20840 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
20850 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
20860 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
20870 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
20880 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
20890 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
208a0 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
208b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
208c0 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
208d0 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
208e0 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
208f0 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
20900 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
20910 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
20920 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
20930 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
20940 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
20950 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
20960 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
20970 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
20980 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
20990 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
209a0 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
209b0 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
209c0 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
209d0 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
209e0 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
209f0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
20a00 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
20a10 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
20a20 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
20a30 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
20a40 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
20a50 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
20a60 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
20a70 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
20a80 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
20a90 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
20aa0 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
20ab0 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
20ac0 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
20ad0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
20ae0 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
20af0 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
20b00 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
20b10 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
20b20 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
20b30 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
20b40 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
20b50 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
20b60 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
20b70 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
20b80 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
20b90 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
20ba0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
20bb0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
20bc0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
20bd0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
20be0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20bf0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
20c00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20c10 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
20c20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
20c30 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
20c40 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
20c50 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
20c60 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
20c70 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
20c80 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72  IsValid(pC->pCur
20c90 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
20ca0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20cb0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
20cc0 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
20cd0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
20ce0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
20cf0 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
20d00 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
20d10 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  () */.        if
20d20 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
20d30 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
20d40 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
20d50 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
20d60 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
20d70 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
20d80 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
20d90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
20da0 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
20db0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
20dc0 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
20dd0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
20de0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
20df0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
20e00 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
20e10 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
20e20 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
20e30 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
20e40 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
20e50 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
20e60 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
20e70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
20e80 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
20e90 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
20ea0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
20eb0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
20ec0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20ed0 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
20ee0 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
20ef0 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
20f00 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
20f10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20f20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
20f30 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
20f40 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
20f50 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
20f60 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
20f70 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
20f80 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
20f90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
20fa0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
20fb0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
20fc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
20fd0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
20fe0 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
20ff0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
21000 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
21010 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
21020 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
21030 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73  (pMem);.      as
21040 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
21050 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
21060 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
21070 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
21080 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d   */.      if( pM
21090 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
210a0 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
210b0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
210c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
210d0 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
210e0 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f  R-12275-61338 */
210f0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
21100 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
21110 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
21120 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
21130 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  1 ){.        v =
21140 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
21150 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d        }.      pM
21160 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
21170 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66   }.#endif.    if
21180 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
21190 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
211a0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
211b0 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
211c0 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
211d0 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
211e0 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
211f0 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
21200 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
21210 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
21220 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
21230 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
21240 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
21250 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
21260 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
21270 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
21280 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
21290 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
212a0 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
212b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
212c0 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
212d0 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
212e0 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
212f0 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
21300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21310 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
21320 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
21330 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e  ble. */.      cn
21340 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b  t = 0;.      do{
21350 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
21360 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
21370 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
21380 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
21390 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f  WID>>1); v++;  /
213a0 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20  * Ensure that v 
213b0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
213c0 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77  zero */.      }w
213d0 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71  hile(  ((rc = sq
213e0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
213f0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
21400 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
21410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21440 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
21450 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
21460 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
21470 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
21480 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
21490 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
214a0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
214b0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
214c0 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
214d0 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
214e0 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
214f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21500 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
21510 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
21520 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
21530 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
21540 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
21550 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21560 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
21570 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
21580 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
21590 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
215a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
215b0 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
215c0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
215d0 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64  : intkey=r[P3] d
215e0 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
215f0 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
21600 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
21610 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
21620 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
21630 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
21640 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
21650 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
21660 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
21670 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
21680 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
21690 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
216a0 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
216b0 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
216c0 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
216d0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
216e0 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
216f0 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
21700 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
21710 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
21720 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
21730 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
21740 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
21750 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
21760 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
21770 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
21780 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
21790 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
217a0 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
217b0 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
217c0 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
217d0 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
217e0 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
217f0 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
21800 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
21810 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
21820 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
21830 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
21840 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  ag of P5 is set 
21850 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  and if the resul
21860 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74  t of.** the last
21870 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
21880 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77  (OP_NotExists) w
21890 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68  as a success, th
218a0 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61  en this.** opera
218b0 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74  tion will not at
218c0 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
218d0 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f  e appropriate ro
218e0 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a  w before doing.*
218f0 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74  * the insert but
21900 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76   will instead ov
21910 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20  erwrite the row 
21920 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20  that the cursor 
21930 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  is.** currently 
21940 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72  pointing to.  Pr
21950 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72  esumably, the pr
21960 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ior OP_NotExists
21970 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61   opcode.** has a
21980 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65  lready positione
21990 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72  d the cursor cor
219a0 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73  rectly.  This is
219b0 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
219c0 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20  .** that boosts 
219d0 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61  performance by a
219e0 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e  voiding redundan
219f0 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49  t seeks..**.** I
21a00 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
21a10 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
21a20 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
21a30 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
21a40 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
21a50 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
21a60 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
21a70 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
21a80 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
21a90 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
21aa0 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
21ab0 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
21ac0 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
21ad0 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
21ae0 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
21af0 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
21b00 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63  nt to a string c
21b10 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
21b20 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20  ble-name, or.** 
21b30 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
21b40 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  it is not NULL, 
21b50 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
21b60 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65  hook .** (sqlite
21b70 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
21b80 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f  k) is invoked fo
21b90 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
21ba0 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
21bb0 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
21bc0 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
21bd0 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
21be0 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
21bf0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
21c00 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
21c10 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
21c20 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
21c30 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
21c40 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
21c50 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
21c60 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
21c70 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
21c80 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
21c90 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
21ca0 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
21cb0 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
21cc0 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
21cd0 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
21ce0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
21cf0 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
21d00 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
21d10 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
21d20 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
21d30 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
21d40 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
21d50 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
21d60 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
21d70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20  sis:  intkey=P3 
21d80 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
21d90 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
21da0 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
21db0 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
21dc0 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
21dd0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
21de0 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
21df0 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
21e00 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
21e10 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
21e20 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
21e30 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
21e40 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
21e50 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
21e60 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
21e70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
21e80 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
21e90 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
21ea0 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
21eb0 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
21ec0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
21ed0 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
21ee0 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
21ef0 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72  ROWID or key for
21f00 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
21f10 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
21f20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
21f30 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74    /* Cursor to t
21f40 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20  able into which 
21f50 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65  insert is writte
21f60 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  n */.  int nZero
21f70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
21f80 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73  er of zero-bytes
21f90 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20   to append */.  
21fa0 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
21fb0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
21fc0 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
21fd0 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
21fe0 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
21ff0 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
22000 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
22010 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
22020 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63  date hook */.  c
22030 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b  onst char *zTbl;
22040 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d   /* Table name -
22050 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70 64   used by the opd
22060 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e  ate hook */.  in
22070 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  t op;           
22080 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70  /* Opcode for up
22090 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54  date hook: SQLIT
220a0 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49  E_UPDATE or SQLI
220b0 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20  TE_INSERT */..  
220c0 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f  pData = &aMem[pO
220d0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
220e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
220f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22100 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
22110 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61  memIsValid(pData
22120 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
22130 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22140 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22150 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22160 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
22170 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
22180 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
22190 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
221a0 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47 49  sTable );.  REGI
221b0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
221c0 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69  p2, pData);..  i
221d0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
221e0 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20  OP_Insert ){.   
221f0 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f   pKey = &aMem[pO
22200 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
22210 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20  rt( pKey->flags 
22220 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
22230 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
22240 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20  lid(pKey) );.   
22250 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
22260 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a  pOp->p3, pKey);.
22270 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d      iKey = pKey-
22280 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >u.i;.  }else{. 
22290 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
222a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
222b0 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65 79  tInt );.    iKey
222c0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a   = pOp->p3;.  }.
222d0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
222e0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
222f0 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
22300 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
22310 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
22320 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   ) db->lastRowid
22330 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69   = lastRowid = i
22340 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61  Key;.  if( pData
22350 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
22360 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d  ll ){.    pData-
22370 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74  >z = 0;.    pDat
22380 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  a->n = 0;.  }els
22390 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
223a0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Data->flags & (M
223b0 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
223c0 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65   );.  }.  seekRe
223d0 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35  sult = ((pOp->p5
223e0 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
223f0 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
22400 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a  eekResult : 0);.
22410 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
22420 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
22430 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61  .    nZero = pDa
22440 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
22450 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  else{.    nZero 
22460 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  = 0;.  }.  rc = 
22470 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
22480 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  rt(pC->pCursor, 
22490 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20  0, iKey,.       
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224b0 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61     pData->z, pDa
224c0 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20  ta->n, nZero,.  
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224e0 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
224f0 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44   & OPFLAG_APPEND
22500 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74  )!=0, seekResult
22510 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65  .  );.  pC->defe
22520 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
22530 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22540 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22550 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
22560 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
22570 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
22580 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
22590 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
225a0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
225b0 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62  >p4.z ){.    zDb
225c0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
225d0 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a  Db].zName;.    z
225e0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
225f0 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
22600 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
22610 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
22620 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
22630 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
22640 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22650 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
22660 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
22670 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
22680 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
22690 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
226a0 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
226b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
226c0 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
226d0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
226e0 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
226f0 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
22700 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
22710 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
22720 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
22730 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
22740 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
22750 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
22760 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
22770 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
22780 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
22790 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
227a0 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
227b0 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
227c0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
227d0 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
227e0 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
227f0 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
22800 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
22810 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a  in a Next loop..
22820 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22830 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
22840 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74   of P2 is set, t
22850 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
22860 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
22870 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
22880 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
22890 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
228a0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
228b0 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
228c0 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
228d0 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
228e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
228f0 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69  not NULL, then i
22900 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  t is the name of
22910 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
22920 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e  P1 is.** pointin
22930 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74  g to.  The updat
22940 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e hook will be i
22950 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78  nvoked, if it ex
22960 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69  ists..** If P4 i
22970 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
22980 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
22990 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  st have been pos
229a0 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67  itioned.** using
229b0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
229c0 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
229d0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
229e0 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
229f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22a00 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
22a10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22a20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22a30 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22a40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22a50 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22a60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
22a70 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f  rsor!=0 );  /* O
22a80 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65  nly valid for re
22a90 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73  al tables, no ps
22aa0 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20  eudotables */.  
22ab0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
22ac0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
22ad0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22ae0 44 45 42 55 47 0a 20 20 2f 2a 20 54 68 65 20 73  DEBUG.  /* The s
22af0 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68  eek operation th
22b00 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  at positioned th
22b10 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74  e cursor prior t
22b20 6f 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c  o OP_Delete will
22b30 0a 20 20 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20  .  ** have also 
22b40 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65  set the pC->move
22b50 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74  toTarget field t
22b60 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  o the rowid of t
22b70 68 65 20 72 6f 77 20 74 68 61 74 0a 20 20 2a 2a  he row that.  **
22b80 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65   is being delete
22b90 64 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  d */.  if( pOp->
22ba0 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61  p4.z && pC->isTa
22bb0 62 6c 65 20 29 7b 0a 20 20 20 20 69 36 34 20 69  ble ){.    i64 i
22bc0 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  Key = 0;.    sql
22bd0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
22be0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 69  (pC->pCursor, &i
22bf0 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
22c00 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  ( pC->movetoTarg
22c10 65 74 3d 3d 69 4b 65 79 20 29 3b 20 0a 20 20 7d  et==iKey ); .  }
22c20 0a 23 65 6e 64 69 66 0a 20 0a 20 20 72 63 20 3d  .#endif. .  rc =
22c30 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
22c40 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  ete(pC->pCursor)
22c50 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
22c60 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
22c70 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
22c80 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
22c90 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
22ca0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
22cb0 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61  _OK && db->xUpda
22cc0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
22cd0 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69  p->p4.z && pC->i
22ce0 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 64 62  sTable ){.    db
22cf0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
22d00 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
22d10 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  , SQLITE_DELETE,
22d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d30 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62           db->aDb
22d40 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c  [pC->iDb].zName,
22d50 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d 3e   pOp->p4.z, pC->
22d60 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
22d70 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
22d80 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69  Db>=0 );.  }.  i
22d90 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
22da0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
22db0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72  >nChange++;.  br
22dc0 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
22dd0 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
22de0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
22df0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
22e00 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
22e10 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
22e20 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
22e30 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
22e40 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
22e50 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
22e60 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
22e70 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
22e80 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
22e90 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
22ea0 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
22eb0 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
22ec0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
22ed0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
22ee0 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
22ef0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
22f00 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
22f10 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
22f20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
22f30 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
22f40 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
22f50 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
22f60 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72    if key(P1)!=tr
22f70 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
22f80 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
22f90 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
22fa0 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
22fb0 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
22fc0 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
22fd0 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
22fe0 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
22ff0 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
23000 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
23010 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
23020 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
23030 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
23040 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
23050 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
23060 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
23070 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
23080 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
23090 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
230a0 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
230b0 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
230c0 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
230d0 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
230e0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
230f0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
23100 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
23110 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
23120 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
23130 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
23140 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
23150 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
23160 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
23170 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
23180 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
23190 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
231a0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
231b0 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
231c0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
231d0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
231e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
231f0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
23200 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
23210 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23220 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
23230 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
23240 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
23250 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
23260 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
23270 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
23280 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
23290 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
232a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
232b0 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
232c0 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
232d0 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
232e0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
232f0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
23300 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31    pc = pOp->p2-1
23310 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
23320 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
23330 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50  rterData P1 P2 P
23340 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
23350 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
23360 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
23370 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
23380 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61  urrent sorter da
23390 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75  ta for sorter cu
233a0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e  rsor P1..** Then
233b0 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d   clear the colum
233c0 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f  n header cache o
233d0 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a  n cursor P3..**.
233e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
233f0 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74  s normally use t
23400 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20  o move a record 
23410 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65  out of the sorte
23420 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20  r and into.** a 
23430 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73  register that is
23440 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20   the source for 
23450 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
23460 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73  ursor created us
23470 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64  ing.** OpenPseud
23480 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d  o.  That pseudo-
23490 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20  table cursor is 
234a0 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20  the one that is 
234b0 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a  identified by.**
234c0 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20   parameter P3.  
234d0 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20  Clearing the P3 
234e0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20  column cache as 
234f0 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63  part of this opc
23500 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20  ode saves.** us 
23510 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69  from having to i
23520 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20  ssue a separate 
23530 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74  NullRow instruct
23540 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61  ion to clear tha
23550 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65  t cache..*/.case
23560 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20   OP_SorterData: 
23570 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
23580 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  pC;..  pOut = &a
23590 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
235a0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
235b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
235c0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
235d0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
235e0 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79  VdbeSorterRowkey
235f0 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73  (pC, pOut);.  as
23600 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
23610 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c  _OK || (pOut->fl
23620 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20  ags & MEM_Blob) 
23630 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
23640 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23650 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23660 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
23670 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
23680 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
23690 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
236a0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
236b0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
236c0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
236d0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
236e0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
236f0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
23700 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f  w data for curso
23710 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
23720 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
23730 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
23740 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
23750 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
23760 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
23770 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
23780 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
23790 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
237a0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
237b0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
237c0 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
237d0 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
237e0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
237f0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
23800 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
23810 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b  ./* Opcode: RowK
23820 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ey P1 P2 * * *.*
23830 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
23840 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ]=key.**.** Writ
23850 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
23860 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
23870 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
23880 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
23890 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
238a0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
238b0 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
238c0 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
238d0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
238e0 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
238f0 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
23900 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
23910 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
23920 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
23930 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
23940 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
23950 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
23960 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
23970 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
23980 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
23990 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
239a0 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
239b0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
239c0 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
239d0 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20  n;.  i64 n64;.. 
239e0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
239f0 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p2];.  memAbo
23a00 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
23a10 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20  ut);..  /* Note 
23a20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20  that RowKey and 
23a30 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c  RowData are real
23a40 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ly exactly the s
23a50 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ame instruction 
23a60 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
23a70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23a80 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23a90 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
23aa0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23ab0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
23ac0 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
23ad0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
23ae0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
23af0 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
23b00 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23b10 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  e==0 || pOp->opc
23b20 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
23b30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
23b40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23b50 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
23b60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23b70 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
23b80 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23b90 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
23ba0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
23bb0 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68  Cursor;..  /* Th
23bc0 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20  e OP_RowKey and 
23bd0 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
23be0 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
23bf0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
23c00 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f  .  ** OP_Rewind/
23c10 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
23c20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
23c30 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ructions that mi
23c40 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20  ght invalidate. 
23c50 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20   ** the cursor. 
23c60 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e   If this where n
23c70 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20  ot the case, on 
23c80 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
23c90 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20   assert()s.  ** 
23ca0 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f  would fail.  Sho
23cb0 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68  uld this ever ch
23cc0 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66  ange (because of
23cd0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
23ce0 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61  code.  ** genera
23cf0 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69  tor) then the fi
23d00 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e  x would be to in
23d10 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20  sert a call to. 
23d20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43   ** sqlite3VdbeC
23d30 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20  ursorMoveto().. 
23d40 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
23d50 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23d60 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
23d70 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
23d80 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
23d90 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e  ) );.#if 0  /* N
23da0 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20  ot required due 
23db0 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
23dc0 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74  to assert() stat
23dd0 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d  ements */.  rc =
23de0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23df0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
23e00 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
23e10 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
23e20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
23e30 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  dif..  if( pC->i
23e40 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
23e50 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
23e60 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41  Table );.    VVA
23e70 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
23e80 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
23e90 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
23ea0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
23eb0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
23ec0 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
23ed0 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
23ee0 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
23ef0 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
23f00 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
23f10 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
23f20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
23f30 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
23f40 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
23f50 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72  {.    VVA_ONLY(r
23f60 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
23f70 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
23f80 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74   &n);.    assert
23f90 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
23fa0 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a  );    /* DataSiz
23fb0 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
23fc0 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33  */.    if( n>(u3
23fd0 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
23fe0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
23ff0 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
24000 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
24010 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e   }.  testcase( n
24020 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  ==0 );.  if( sql
24030 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
24040 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20  AndResize(pOut, 
24050 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20  MAX(n,32)) ){.  
24060 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
24070 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
24080 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
24090 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
240a0 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
240b0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
240c0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
240d0 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
240e0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
240f0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
24100 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
24110 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
24120 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  ->z);.  }.  pOut
24130 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
24140 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
24150 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
24160 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a  r cast to text *
24170 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  /.  UPDATE_MAX_B
24180 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
24190 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
241a0 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
241b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
241c0 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20  pcode: Rowid P1 
241d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
241e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
241f0 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e  d.**.** Store in
24200 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
24210 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
24220 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
24230 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74  table entry that
24240 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e  .** P1 is curren
24250 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a  tly point to..**
24260 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69  .** P1 can be ei
24270 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79  ther an ordinary
24280 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74   table or a virt
24290 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72  ual table.  Ther
242a0 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
242b0 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52  a separate OP_VR
242c0 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  owid opcode for 
242d0 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c  use with virtual
242e0 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69   tables, but thi
242f0 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20  s.** one opcode 
24300 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f  now works for bo
24310 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a  th table types..
24320 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64  */.case OP_Rowid
24330 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
24340 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
24350 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65  elease */.  Vdbe
24360 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36  Cursor *pC;.  i6
24370 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  4 v;.  sqlite3_v
24380 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
24390 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
243a0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  le *pModule;..  
243b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
243c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
243d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
243e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
243f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24400 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
24410 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
24420 6c 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e  leReg==0 || pC->
24430 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
24440 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
24450 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
24460 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
24470 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
24480 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
24490 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
244a0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
244b0 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
244c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
244d0 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
244e0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  pC->pVtabCursor 
244f0 29 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  ){.    pVtab = p
24500 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  C->pVtabCursor->
24510 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
24520 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
24530 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
24540 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
24550 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
24560 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
24570 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76  >pVtabCursor, &v
24580 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
24590 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
245a0 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66  , pVtab);.#endif
245b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
245c0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
245d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
245e0 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
245f0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
24600 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
24610 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20  rRestore(pC);.  
24620 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
24630 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
24640 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
24650 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
24660 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
24670 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62  EM_Null;.      b
24680 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
24690 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
246a0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
246b0 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 61  rsor, &v);.    a
246c0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
246d0 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61  E_OK );  /* Alwa
246e0 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66  ys so because of
246f0 20 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29   CursorRestore()
24700 20 61 62 6f 76 65 20 2a 2f 0a 20 20 7d 0a 20 20   above */.  }.  
24710 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
24720 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24730 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
24740 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
24750 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
24760 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
24770 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
24780 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
24790 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
247a0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
247b0 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
247c0 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
247d0 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
247e0 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
247f0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
24800 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
24810 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24820 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24830 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24840 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24850 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24860 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
24870 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
24880 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24890 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75 72  ;.  if( pC->pCur
248a0 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  sor ){.    sqlit
248b0 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
248c0 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  or(pC->pCursor);
248d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
248e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
248f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
24900 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
24910 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
24920 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69  Column or Prev i
24930 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
24940 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
24950 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74   to the last ent
24960 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
24970 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
24980 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
24990 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
249a0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
249b0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
249c0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
249d0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
249e0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
249f0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
24a00 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
24a10 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
24a20 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
24a30 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
24a40 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
24a50 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
24a60 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
24a70 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
24a80 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
24a90 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
24aa0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
24ab0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
24ac0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
24ad0 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
24ae0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73  ..*/.case OP_Las
24af0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
24b00 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
24b10 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24b20 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
24b30 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
24b40 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24b50 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24b60 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
24b70 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24b80 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24b90 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
24ba0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  >pCursor;.  res 
24bb0 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
24bc0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20  Crsr!=0 );.  rc 
24bd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
24be0 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
24bf0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
24c00 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
24c10 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
24c20 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
24c30 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24c40 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ALE;.#ifdef SQLI
24c50 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
24c60 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b  eekOp = OP_Last;
24c70 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
24c80 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56  p->p2>0 ){.    V
24c90 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
24ca0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
24cb0 28 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f 70  ( res ) pc = pOp
24cc0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
24cd0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
24ce0 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
24cf0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
24d00 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
24d10 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
24d20 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
24d30 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
24d40 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
24d50 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
24d60 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
24d70 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
24d80 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
24d90 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
24da0 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
24db0 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
24dc0 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
24dd0 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
24de0 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
24df0 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
24e00 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
24e10 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
24e20 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
24e30 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
24e40 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
24e50 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
24e60 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
24e70 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
24e80 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
24e90 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
24ea0 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
24eb0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
24ec0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
24ed0 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
24ee0 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
24ef0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
24f00 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
24f10 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
24f20 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
24f30 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
24f40 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
24f50 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
24f60 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
24f70 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
24f80 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
24f90 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
24fa0 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
24fb0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
24fc0 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
24fd0 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
24fe0 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
24ff0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
25000 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
25010 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
25020 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
25030 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
25040 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
25050 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
25060 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
25070 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
25080 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
25090 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d  ex is empty, jum
250a0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
250b0 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74   P2..** If the t
250c0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
250d0 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
250e0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
250f0 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e  following .** in
25100 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
25110 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
25120 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
25130 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
25140 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
25150 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
25160 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
25170 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
25180 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
25190 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
251a0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
251b0 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f  xt, not Prev..*/
251c0 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
251d0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
251e0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
251f0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
25200 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
25210 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
25220 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25230 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25240 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25250 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25260 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25270 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
25280 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
25290 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
252a0 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
252b0 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   1;.#ifdef SQLIT
252c0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
252d0 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64  ekOp = OP_Rewind
252e0 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
252f0 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
25300 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
25310 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28  dbeSorterRewind(
25320 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
25330 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20  se{.    pCrsr = 
25340 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20  pC->pCursor;.   
25350 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
25360 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
25370 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
25380 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
25390 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
253a0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
253b0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
253c0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
253d0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
253e0 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28  8)res;.  assert(
253f0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
25400 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
25410 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
25420 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
25430 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
25440 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
25450 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
25460 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20  /* Opcode: Next 
25470 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
25480 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72  *.** Advance cur
25490 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
254a0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
254b0 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61  next key/data pa
254c0 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
254d0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
254e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f   there are no mo
254f0 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  re key/value pai
25500 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
25510 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
25520 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
25530 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
25540 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65  e cursor advance
25550 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
25560 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
25570 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
25580 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
25590 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
255a0 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
255b0 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a  kGT, SeekGE, or.
255c0 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63  ** OP_Rewind opc
255d0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
255e0 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
255f0 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c    Next is not al
25600 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
25610 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  ow SeekLT, SeekL
25620 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a  E, or OP_Last..*
25630 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
25640 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
25650 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
25660 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
25670 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a    P1 must have.*
25680 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72  * been opened pr
25690 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f  ior to this opco
256a0 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61  de or the progra
256b0 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e  m will segfault.
256c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61  .**.** The P3 va
256d0 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f  lue is a hint to
256e0 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65   the btree imple
256f0 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33  mentation. If P3
25700 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61  ==1, that.** mea
25710 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20  ns P1 is an SQL 
25720 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74  index and that t
25730 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
25740 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  could have been.
25750 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68  ** omitted if th
25760 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65  at index had bee
25770 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73  n unique.  P3 is
25780 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20   usually 0.  P3 
25790 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74  is.** always eit
257a0 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a  her 0 or 1..**.*
257b0 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
257c0 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
257d0 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
257e0 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
257f0 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
25800 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  eNext()..**.** I
25810 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
25820 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
25830 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
25840 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
25850 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
25860 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
25870 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
25880 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
25890 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49 66  so: Prev, NextIf
258a0 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  Open.*/./* Opcod
258b0 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50 31  e: NextIfOpen P1
258c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
258d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
258e0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e  orks just like N
258f0 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ext except that 
25900 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  if cursor P1 is 
25910 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62  not.** open it b
25920 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ehaves a no-op..
25930 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
25940 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ev P1 P2 P3 P4 P
25950 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20  5.**.** Back up 
25960 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
25970 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
25980 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  he previous key/
25990 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
259a0 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
259b0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ex.  If there is
259c0 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79   no previous key
259d0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
259e0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
259f0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
25a00 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
25a10 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
25a20 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75  or backup was su
25a30 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
25a40 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
25a50 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68   P2..**.**.** Th
25a60 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73  e Prev opcode is
25a70 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c   only valid foll
25a80 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c  owing an SeekLT,
25a90 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f   SeekLE, or.** O
25aa0 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73  P_Last opcode us
25ab0 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
25ac0 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76  he cursor.  Prev
25ad0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
25ae0 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
25af0 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20  kGT, SeekGE, or 
25b00 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a  OP_Rewind..**.**
25b10 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
25b20 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
25b30 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
25b40 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66  seudo-table.  If
25b50 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70   P1 is.** not op
25b60 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  en then the beha
25b70 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
25b80 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  d..**.** The P3 
25b90 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20  value is a hint 
25ba0 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70  to the btree imp
25bb0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20  lementation. If 
25bc0 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d  P3==1, that.** m
25bd0 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51  eans P1 is an SQ
25be0 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74  L index and that
25bf0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
25c00 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  n could have bee
25c10 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20  n.** omitted if 
25c20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62  that index had b
25c30 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20  een unique.  P3 
25c40 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50  is usually 0.  P
25c50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65  3 is.** always e
25c60 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
25c70 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
25c80 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
25c90 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
25ca0 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
25cb0 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
25cc0 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a  reePrevious()..*
25cd0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
25ce0 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
25cf0 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
25d00 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
25d10 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
25d20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
25d30 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
25d40 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20  remented..*/./* 
25d50 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f 70  Opcode: PrevIfOp
25d60 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
25d70 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
25d80 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
25d90 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74 20  ike Prev except 
25da0 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
25db0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
25dc0 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
25dd0 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
25de0 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f  SorterNext: {  /
25df0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
25e00 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
25e10 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70  t res;..  pC = p
25e20 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25e30 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
25e40 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 65  rter(pC) );.  re
25e50 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  s = 0;.  rc = sq
25e60 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e  lite3VdbeSorterN
25e70 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73  ext(db, pC, &res
25e80 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74  );.  goto next_t
25e90 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65  ail;.case OP_Pre
25ea0 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  vIfOpen:    /* j
25eb0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
25ec0 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  extIfOpen:    /*
25ed0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
25ee0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25ef0 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
25f00 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a  * Fall through *
25f10 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20  /.case OP_Prev: 
25f20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
25f30 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
25f40 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
25f50 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
25f60 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25f70 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25f80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
25f90 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28  p->p5<ArraySize(
25fa0 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a  p->aCounter) );.
25fb0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25fc0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20  pOp->p1];.  res 
25fd0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
25fe0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25ff0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
26000 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
26010 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
26020 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
26030 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72  rt( res==0 || (r
26040 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54  es==1 && pC->isT
26050 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65  able==0) );.  te
26060 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29  stcase( res==1 )
26070 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26080 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
26090 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
260a0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
260b0 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65  eeNext );.  asse
260c0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
260d0 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d  =OP_Prev || pOp-
260e0 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
260f0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
26100 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  us );.  assert( 
26110 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
26120 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f  NextIfOpen || pO
26130 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
26140 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
26150 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26160 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
26170 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d  evIfOpen || pOp-
26180 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
26190 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
261a0 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e  us);..  /* The N
261b0 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  ext opcode is on
261c0 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
261d0 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e  ekGT, SeekGE, an
261e0 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54  d Rewind..  ** T
261f0 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
26200 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
26210 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  r SeekLT, SeekLE
26220 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20  , and Last. */. 
26230 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
26240 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
26250 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
26260 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20 20  _NextIfOpen.    
26270 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
26280 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70  ==OP_SeekGT || p
26290 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
262a0 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  ekGE.       || p
262b0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65  C->seekOp==OP_Re
262c0 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  wind || pC->seek
262d0 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20  Op==OP_Found);. 
262e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
262f0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
26300 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
26310 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20 20  _PrevIfOpen.    
26320 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
26330 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70  ==OP_SeekLT || p
26340 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
26350 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  ekLE.       || p
26360 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61  C->seekOp==OP_La
26370 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f  st );..  rc = pO
26380 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70  p->p4.xAdvance(p
26390 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
263a0 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20  );.next_tail:.  
263b0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
263c0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
263d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
263e0 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66  (res==0,2);.  if
263f0 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
26400 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
26410 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
26420 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43  2 - 1;.    p->aC
26430 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
26440 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
26450 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
26460 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
26470 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
26480 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
26490 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74  w = 1;.  }.  got
264a0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
264b0 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
264c0 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
264d0 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20  1 P2 P3 * P5.** 
264e0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
264f0 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P2].**.** Regist
26500 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
26510 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
26520 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
26530 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
26540 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
26550 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
26560 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
26570 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
26580 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
26590 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  s nil..**.** P3 
265a0 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70  is a flag that p
265b0 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74  rovides a hint t
265c0 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
265d0 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  er that this.** 
265e0 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
265f0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
26600 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
26610 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  s the OPFLAG_NCH
26620 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68  ANGE bit set, th
26630 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
26640 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72  unter is.** incr
26650 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  emented by this 
26660 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
26670 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
26680 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  NGE bit is clear
26690 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68  ,.** then the ch
266a0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
266b0 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a  unchanged..**.**
266c0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
266d0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
266e0 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68 65  ULT bit set, the
266f0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73  n the cursor mus
26700 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64  t have.** just d
26710 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68  one a seek to th
26720 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68 65  e spot where the
26730 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f   new entry is to
26740 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a   be inserted..**
26750 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64   This flag avoid
26760 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61  s doing an extra
26770 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   seek..**.** Thi
26780 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
26790 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
267a0 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
267b0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
267c0 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
267d0 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
267e0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
267f0 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
26800 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in2 */.case OP_I
26810 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
26820 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
26830 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26840 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
26850 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20  ;.  int nKey;.  
26860 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79  const char *zKey
26870 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
26880 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26890 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
268a0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
268b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
268c0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
268d0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
268e0 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
268f0 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
26900 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d  ert) );.  pIn2 =
26910 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
26920 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d  .  assert( pIn2-
26930 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
26940 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  b );.  pCrsr = p
26950 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
26960 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
26970 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
26980 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73  nChange++;.  ass
26990 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
269a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
269b0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72  sTable==0 );.  r
269c0 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
269d0 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  In2);.  if( rc==
269e0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
269f0 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
26a00 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
26a10 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
26a20 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29  rWrite(pC, pIn2)
26a30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
26a40 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
26a50 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d 20  n;.      zKey = 
26a60 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72  pIn2->z;.      r
26a70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26a80 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a 4b  Insert(pCrsr, zK
26a90 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c  ey, nKey, "", 0,
26aa0 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20   0, pOp->p3, .  
26ab0 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
26ac0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
26ad0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
26ae0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
26af0 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
26b00 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
26b10 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
26b20 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61   );.      pC->ca
26b30 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26b40 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20  E_STALE;.    }. 
26b50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
26b60 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
26b70 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
26b80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
26b90 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  y=r[P2@P3].**.**
26ba0 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
26bb0 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
26bc0 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
26bd0 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
26be0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
26bf0 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
26c00 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
26c10 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
26c20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
26c30 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
26c40 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
26c50 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
26c60 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
26c70 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
26c80 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
26c90 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
26ca0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
26cb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
26cc0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f  >0 && pOp->p2+pO
26cd0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
26ce0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
26cf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26d00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
26d10 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
26d20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26d30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26d40 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
26d50 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
26d60 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
26d70 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
26d80 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
26d90 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
26da0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
26db0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
26dc0 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66  pOp->p3;.  r.def
26dd0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72  ault_rc = 0;.  r
26de0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
26df0 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53  p->p2];.#ifdef S
26e00 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
26e10 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
26e20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
26e30 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
26e40 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
26e50 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63  ); }.#endif.  rc
26e60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
26e70 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
26e80 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
26e90 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  res);.  if( rc==
26ea0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
26eb0 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
26ec0 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
26ed0 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20  te(pCrsr);.  }. 
26ee0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
26ef0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
26f00 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
26f10 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
26f20 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
26f30 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
26f40 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
26f50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
26f60 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72  ]=rowid.**.** Wr
26f70 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
26f80 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
26f90 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
26fa0 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
26fb0 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
26fc0 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
26fd0 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
26fe0 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
26ff0 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
27000 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
27010 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
27020 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
27030 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
27040 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
27050 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
27060 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
27070 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
27080 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
27090 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
270a0 65 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  e */.  BtCursor 
270b0 2a 70 43 72 73 72 3b 0a 20 20 56 64 62 65 43 75  *pCrsr;.  VdbeCu
270c0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
270d0 72 6f 77 69 64 3b 0a 0a 20 20 61 73 73 65 72 74  rowid;..  assert
270e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
270f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
27100 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
27110 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27120 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27130 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
27140 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
27150 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
27160 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
27170 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 61 73 73 65  MEM_Null;.  asse
27180 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
27190 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
271a0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
271b0 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 73  to==0 );..  /* s
271c0 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72 52  qlite3VbeCursorR
271d0 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c  estore() can onl
271e0 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72 65  y fail if the re
271f0 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64 65  cord has been de
27200 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66  leted.  ** out f
27210 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75  rom under the cu
27220 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c  rsor.  That will
27230 20 6e 65 76 65 72 20 68 61 70 70 65 6e 64 20 66   never happend f
27240 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20  or an IdxRowid. 
27250 20 2a 2a 20 6f 70 63 6f 64 65 2c 20 68 65 6e 63   ** opcode, henc
27260 65 20 74 68 65 20 4e 45 56 45 52 28 29 20 61 72  e the NEVER() ar
27270 72 6f 75 6e 64 20 74 68 65 20 63 68 65 63 6b 20  round the check 
27280 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  of the return va
27290 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d  lue..  */.  rc =
272a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
272b0 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20  orRestore(pC);. 
272c0 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
272d0 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
272e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
272f0 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d  ror;..  if( !pC-
27300 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
27310 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  rowid = 0;  /* N
27320 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
27330 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
27340 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
27350 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
27360 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
27370 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a  pCrsr, &rowid);.
27380 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
27390 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
273a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
273b0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
273c0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
273d0 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  wid;.    pOut->f
273e0 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
273f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27400 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45  /* Opcode: IdxGE
27410 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27420 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
27430 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
27440 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
27450 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
27460 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
27470 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
27480 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
27490 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
274a0 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
274b0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
274c0 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
274d0 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
274e0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
274f0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
27500 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
27510 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
27520 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
27530 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
27540 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
27550 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
27560 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
27570 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
27580 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
27590 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
275a0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
275b0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
275c0 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50  code: IdxGT P1 P
275d0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
275e0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
275f0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
27600 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
27610 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
27620 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
27630 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
27640 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
27650 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
27660 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
27670 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
27680 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
27690 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
276a0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
276b0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
276c0 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
276d0 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74   .** fields at t
276e0 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  he end..**.** If
276f0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
27700 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
27710 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
27720 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
27730 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
27740 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
27750 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
27760 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
27770 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32  ode: IdxLT P1 P2
27780 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
27790 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
277a0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
277b0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
277c0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
277d0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
277e0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
277f0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
27800 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
27810 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
27820 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
27830 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e  gainst.** the in
27840 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63  dex that P1 is c
27850 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
27860 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
27870 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
27880 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68  r.** ROWID on th
27890 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
278a0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
278b0 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20  x entry is less 
278c0 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
278d0 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ue then jump to 
278e0 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  P2..** Otherwise
278f0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
27900 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
27910 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
27920 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32  ode: IdxLE P1 P2
27930 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
27940 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
27950 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
27960 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
27970 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27980 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
27990 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
279a0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
279b0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
279c0 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20  ROWID.  Compare 
279d0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
279e0 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e  gainst.** the in
279f0 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63  dex that P1 is c
27a00 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
27a10 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
27a20 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
27a30 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68  r.** ROWID on th
27a40 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a  e P1 index..**.*
27a50 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
27a60 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20  x entry is less 
27a70 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
27a80 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74   the key value t
27a90 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  hen jump.** to P
27aa0 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  2. Otherwise fal
27ab0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
27ac0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
27ad0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n..*/.case OP_Id
27ae0 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLE:          /*
27af0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
27b00 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20  _IdxGT:         
27b10 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
27b20 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20   OP_IdxLT:      
27b30 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
27b40 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b  ase OP_IdxGE:  {
27b50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
27b60 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
27b70 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
27b80 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
27b90 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
27ba0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27bb0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27bc0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27bd0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27be0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27bf0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
27c00 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
27c10 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
27c20 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
27c30 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27c40 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
27c50 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
27c60 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
27c70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
27c80 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
27c90 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
27ca0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
27cb0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
27cc0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
27cd0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f   pOp->opcode<OP_
27ce0 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73  IdxLT ){.    ass
27cf0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27d00 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
27d10 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
27d20 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xGT );.    r.def
27d30 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
27d40 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
27d50 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
27d60 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
27d70 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
27d80 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
27d90 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  lt_rc = 0;.  }. 
27da0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
27db0 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
27dc0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
27dd0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
27de0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
27df0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
27e00 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
27e10 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
27e20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
27e30 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
27e40 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
27e50 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
27e60 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
27e70 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
27e80 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
27e90 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
27ea0 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
27eb0 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
27ec0 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
27ed0 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
27ee0 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
27ef0 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
27f00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
27f10 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
27f20 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
27f30 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
27f40 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
27f50 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
27f60 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27f70 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
27f80 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
27f90 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
27fa0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
27fb0 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
27fc0 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20 20 20  f( res>0 ){.    
27fd0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
27fe0 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   ;.  }.  break;.
27ff0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
28000 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a  stroy P1 P2 P3 *
28010 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
28020 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  an entire databa
28030 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
28040 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
28050 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
28060 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76  e.** file is giv
28070 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  en by P1..**.** 
28080 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
28090 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20  destroyed is in 
280a0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
280b0 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e  e file if P3==0.
280c0 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68    If.** P3==1 th
280d0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
280e0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
280f0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
28100 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
28110 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
28120 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
28130 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
28140 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
28150 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  **.** If AUTOVAC
28160 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74  UUM is enabled t
28170 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
28180 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  le that another 
28190 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67  root page.** mig
281a0 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f  ht be moved into
281b0 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74   the newly delet
281c0 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  ed root page in 
281d0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c  order to keep al
281e0 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20  l.** root pages 
281f0 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68  contiguous at th
28200 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
28210 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
28220 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75  e former.** valu
28230 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61  e of the root pa
28240 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20  ge that moved - 
28250 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65  its value before
28260 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72   the move occurr
28270 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ed -.** is store
28280 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
28290 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a  .  If no page .*
282a0 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72  * movement was r
282b0 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65  equired (because
282c0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
282d0 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72   dropped was alr
282e0 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73  eady .** the las
282f0 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  t one in the dat
28300 61 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65  abase) then a ze
28310 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
28320 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
28330 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
28340 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61   disabled then a
28350 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
28360 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
28370 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
28380 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50  Clear.*/.case OP
28390 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20  _Destroy: {     
283a0 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
283b0 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  se */.  int iMov
283c0 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74 3b 0a  ed;.  int iCnt;.
283d0 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 0a 20    Vdbe *pVdbe;. 
283e0 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
283f0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
28400 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20 53  ==0 );.#ifndef S
28410 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
28420 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74 20 3d  ALTABLE.  iCnt =
28430 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62 65 3d   0;.  for(pVdbe=
28440 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64 62 65  db->pVdbe; pVdbe
28450 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62 65 2d  ; pVdbe = pVdbe-
28460 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69 66 28  >pNext){.    if(
28470 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d 3d 56   pVdbe->magic==V
28480 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 26 26  DBE_MAGIC_RUN &&
28490 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61 64 65   pVdbe->bIsReade
284a0 72 20 0a 20 20 20 20 20 26 26 20 70 56 64 62 65  r .     && pVdbe
284b0 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 3c 32  ->inVtabMethod<2
284c0 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e 3d 30   && pVdbe->pc>=0
284d0 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69   .    ){.      i
284e0 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  Cnt++;.    }.  }
284f0 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20 3d 20  .#else.  iCnt = 
28500 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b 0a 23  db->nVdbeRead;.#
28510 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e 66 6c  endif.  pOut->fl
28520 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
28530 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29 7b 0a    if( iCnt>1 ){.
28540 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
28550 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
28560 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
28570 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Abort;.  }else{.
28580 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
28590 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  3;.    assert( i
285a0 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20 61 73  Cnt==1 );.    as
285b0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
285c0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
285d0 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  Db) );.    iMove
285e0 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
285f0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
28600 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
28610 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
28620 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
28630 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
28640 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
28650 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
28660 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
28670 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
28680 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  .i = iMoved;.#if
28690 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
286a0 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
286b0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
286c0 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
286d0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
286e0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
286f0 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
28700 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
28710 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
28720 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
28730 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
28740 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
28750 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
28760 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
28770 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
28780 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
28790 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
287a0 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
287b0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
287c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
287d0 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
287e0 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
287f0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
28800 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
28810 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
28820 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
28830 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
28840 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
28850 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
28860 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
28870 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
28880 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
28890 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
288a0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
288b0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
288c0 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
288d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
288e0 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
288f0 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
28900 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
28910 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
28920 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
28930 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
28940 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
28950 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
28960 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
28970 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
28980 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
28990 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
289a0 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
289b0 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
289c0 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
289d0 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
289e0 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
289f0 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
28a00 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
28a10 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
28a20 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
28a30 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
28a40 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
28a50 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
28a60 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
28a70 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
28a80 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
28a90 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
28aa0 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
28ab0 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
28ac0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
28ad0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
28ae0 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
28af0 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
28b00 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
28b10 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
28b20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
28b30 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
28b40 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
28b50 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
28b60 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
28b70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20  Op->p2) );.  rc 
28b80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
28b90 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
28ba0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
28bb0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
28bc0 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
28bd0 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
28be0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
28bf0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
28c00 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
28c10 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
28c20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
28c30 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
28c40 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
28c50 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
28c60 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
28c70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
28c80 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
28c90 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
28ca0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
28cb0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53  * Opcode: ResetS
28cc0 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a  orter P1 * * * *
28cd0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
28ce0 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20  l contents from 
28cf0 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
28d00 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a  ble or sorter.**
28d10 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e   that is open on
28d20 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a   cursor P1..**.*
28d30 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e  * This opcode on
28d40 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72  ly works for cur
28d50 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f  sors used for so
28d60 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65  rting and.** ope
28d70 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e  ned with OP_Open
28d80 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f  Ephemeral or OP_
28d90 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63  SorterOpen..*/.c
28da0 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74  ase OP_ResetSort
28db0 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  er: {.  VdbeCurs
28dc0 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65  or *pC;. .  asse
28dd0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28de0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28df0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
28e00 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28e10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
28e20 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70  0 );.  if( pC->p
28e30 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20 73 71  Sorter ){.    sq
28e40 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
28e50 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70 53 6f  eset(db, pC->pSo
28e60 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rter);.  }else{.
28e70 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
28e80 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20  isEphemeral );. 
28e90 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
28ea0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66  treeClearTableOf
28eb0 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
28ec0 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
28ed0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28ee0 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50  CreateTable P1 P
28ef0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
28f00 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
28f10 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
28f20 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
28f30 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
28f40 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
28f50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
28f60 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
28f70 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
28f80 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
28f90 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
28fa0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
28fb0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
28fc0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
28fd0 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
28fe0 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
28ff0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
29000 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
29010 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
29020 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
29030 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
29040 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
29050 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
29060 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
29070 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
29080 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
29090 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
290a0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
290b0 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
290c0 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
290d0 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
290e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
290f0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
29100 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
29110 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ew index in the 
29120 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
29130 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
29140 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
29150 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
29160 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
29170 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
29180 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
29190 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
291a0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
291b0 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
291c0 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
291d0 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63  2..**.** See doc
291e0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50  umentation on OP
291f0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72  _CreateTable for
29200 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
29210 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
29220 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a   OP_CreateIndex:
29230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
29240 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
29250 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
29260 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  Table: {        
29270 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
29280 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 70 67  ease */.  int pg
29290 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b  no;.  int flags;
292a0 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70  .  Db *pDb;..  p
292b0 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  gno = 0;.  asser
292c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
292d0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
292e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
292f0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
29300 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
29310 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
29320 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
29330 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
29340 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29350 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20  rt( pDb->pBt!=0 
29360 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
29370 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54  code==OP_CreateT
29380 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66  able ){.    /* f
29390 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54  lags = BTREE_INT
293a0 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67  KEY; */.    flag
293b0 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
293c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  ;.  }else{.    f
293d0 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f  lags = BTREE_BLO
293e0 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  BKEY;.  }.  rc =
293f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
29400 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
29410 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29  t, &pgno, flags)
29420 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
29430 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pgno;.  break;.}
29440 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
29450 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
29460 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
29470 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
29480 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
29490 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
294a0 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
294b0 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
294c0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
294d0 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4. .**.** This
294e0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
294f0 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72  the parser to cr
29500 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75  eate a new virtu
29510 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74  al machine,.** t
29520 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77  hen runs the new
29530 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
29540 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20  .  It is thus a 
29550 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64  re-entrant opcod
29560 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  e..*/.case OP_Pa
29570 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69  rseSchema: {.  i
29580 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20  nt iDb;.  const 
29590 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20  char *zMaster;. 
295a0 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49   char *zSql;.  I
295b0 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61  nitData initData
295c0 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70  ;..  /* Any prep
295d0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74  ared statement t
295e0 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  hat invokes this
295f0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c   opcode will hol
29600 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f  d mutexes.  ** o
29610 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20  n every btree.  
29620 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71  This is a prereq
29630 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b  uisite for invok
29640 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65  ing .  ** sqlite
29650 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e  3InitCallback().
29660 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
29670 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
29680 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e  iDb=0; iDb<db->n
29690 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20  Db; iDb++){.    
296a0 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c  assert( iDb==1 |
296b0 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f  | sqlite3BtreeHo
296c0 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62  ldsMutex(db->aDb
296d0 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20  [iDb].pBt) );.  
296e0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20  }.#endif..  iDb 
296f0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73  = pOp->p1;.  ass
29700 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
29710 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
29720 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f  assert( DbHasPro
29730 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44  perty(db, iDb, D
29740 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20  B_SchemaLoaded) 
29750 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20  );.  /* Used to 
29760 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c  be a conditional
29770 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65   */ {.    zMaste
29780 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45  r = SCHEMA_TABLE
29790 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44  (iDb);.    initD
297a0 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
297b0 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
297c0 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
297d0 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
297e0 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
297f0 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
29800 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
29810 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
29820 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
29830 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
29840 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
29850 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
29860 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c  >aDb[iDb].zName,
29870 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70   zMaster, pOp->p
29880 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53  4.z);.    if( zS
29890 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  ql==0 ){.      r
298a0 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
298b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
298c0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
298d0 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
298e0 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
298f0 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
29900 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
29910 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
29920 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
29930 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
29940 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
29950 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
29960 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
29970 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
29980 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
29990 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
299a0 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
299b0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
299c0 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
299d0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
299e0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
299f0 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33  if( rc ) sqlite3
29a00 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
29a10 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
29a20 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
29a30 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67  E_NOMEM ){.    g
29a40 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
29a50 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
29a60 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
29a70 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
29a80 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
29a90 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
29aa0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
29ab0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
29ac0 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
29ad0 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
29ae0 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
29af0 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
29b00 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
29b10 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
29b20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
29b30 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
29b40 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
29b50 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
29b60 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
29b70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
29b80 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
29b90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
29ba0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
29bb0 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
29bc0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
29bd0 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
29be0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
29bf0 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
29c00 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
29c10 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
29c20 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
29c30 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
29c40 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
29c50 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
29c60 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
29c70 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
29c80 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
29c90 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
29ca0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
29cb0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
29cc0 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
29cd0 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
29ce0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
29cf0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
29d00 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
29d10 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
29d20 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
29d30 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
29d40 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
29d50 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
29d60 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
29d70 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
29d80 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
29d90 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
29da0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
29db0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
29dc0 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
29dd0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
29de0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
29df0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
29e00 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
29e10 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
29e20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
29e30 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
29e40 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
29e50 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
29e60 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
29e70 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
29e80 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
29e90 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
29ea0 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
29eb0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
29ec0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
29ed0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
29ee0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
29ef0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
29f00 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
29f10 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
29f20 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
29f30 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
29f40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
29f50 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
29f60 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
29f70 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
29f80 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
29f90 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
29fa0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
29fb0 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
29fc0 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
29fd0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
29fe0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
29ff0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
2a000 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2a010 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2a020 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2a030 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2a040 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2a050 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2a060 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2a070 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2a080 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2a090 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2a0a0 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
2a0b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a0c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
2a0d0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2a0e0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2a0f0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2a100 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2a110 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
2a120 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
2a130 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a   P2 P3 * P5.**.*
2a140 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73  * Do an analysis
2a150 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c   of the currentl
2a160 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e  y open database.
2a170 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65    Store in.** re
2a180 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74 65  gister P1 the te
2a190 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d  xt of an error m
2a1a0 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69 6e  essage describin
2a1b0 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a  g any problems..
2a1c0 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d  ** If no problem
2a1d0 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f  s are found, sto
2a1e0 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67  re a NULL in reg
2a1f0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2a200 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33 20  The register P3 
2a210 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78  contains the max
2a220 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
2a230 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a  llowed errors..*
2a240 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33  * At most reg(P3
2a250 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65  ) errors will be
2a260 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e   reported..** In
2a270 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2a280 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73  e analysis stops
2a290 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28   as soon as reg(
2a2a0 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a  P1) errors are .
2a2b0 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31  ** seen.  Reg(P1
2a2c0 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  ) is updated wit
2a2d0 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  h the number of 
2a2e0 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
2a2f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74  ..**.** The root
2a300 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66   page numbers of
2a310 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74   all tables in t
2a320 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
2a330 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65  integer.** store
2a340 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65  d in reg(P1), re
2a350 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b  g(P1+1), reg(P1+
2a360 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20  2), ....  There 
2a370 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a  are P2 tables.**
2a380 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66   total..**.** If
2a390 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
2a3a0 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
2a3b0 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
2a3c0 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
2a3d0 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
2a3e0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2a3f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2a400 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
2a410 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
2a420 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
2a430 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
2a440 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
2a450 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
2a460 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
2a470 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
2a480 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
2a490 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
2a4a0 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
2a4b0 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
2a4c0 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
2a4d0 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
2a4e0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  ed */.  int j;  
2a4f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
2a500 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
2a510 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
2a520 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
2a530 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
2a540 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
2a550 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
2a560 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
2a570 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
2a580 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
2a590 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
2a5a0 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
2a5b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
2a5c0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
2a5d0 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
2a5e0 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
2a5f0 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71   );.  aRoot = sq
2a600 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
2a610 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29  (db, sizeof(int)
2a620 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20  *(nRoot+1) );.  
2a630 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67  if( aRoot==0 ) g
2a640 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73  oto no_mem;.  as
2a650 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
2a660 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
2a670 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
2a680 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
2a690 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2a6a0 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2a6b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2a6c0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2a6d0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
2a6e0 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2a6f0 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
2a700 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2a710 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  1];.  for(j=0; j
2a720 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20  <nRoot; j++){.  
2a730 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e    aRoot[j] = (in
2a740 74 29 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  t)sqlite3VdbeInt
2a750 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b  Value(&pIn1[j]);
2a760 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20  .  }.  aRoot[j] 
2a770 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
2a780 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
2a790 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2a7a0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2a7b0 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b  ask, pOp->p5) );
2a7c0 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
2a7d0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
2a7e0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
2a7f0 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e  5].pBt, aRoot, n
2a800 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a820 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
2a830 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a  r->u.i, &nErr);.
2a840 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2a850 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e  db, aRoot);.  pn
2a860 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
2a870 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2a880 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
2a890 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
2a8a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
2a8b0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
2a8c0 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
2a8d0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
2a8e0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
2a8f0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
2a900 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
2a910 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
2a920 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
2a930 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2a940 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
2a950 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2a960 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
2a970 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2a980 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2a990 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2a9a0 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
2a9b0 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
2a9c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a9d0 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50  opsis:  rowset(P
2a9e0 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49  1)=r[P2].**.** I
2a9f0 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65  nsert the intege
2aa00 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20  r value held by 
2aa10 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f  register P2 into
2aa20 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78   a boolean index
2aa30 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69  .** held in regi
2aa40 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41  ster P1..**.** A
2aa50 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c  n assertion fail
2aa60 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61  s if P2 is not a
2aa70 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61  n integer..*/.ca
2aa80 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a  se OP_RowSetAdd:
2aa90 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c   {       /* in1,
2aaa0 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in2 */.  pIn1 =
2aab0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2aac0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2aad0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2aae0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
2aaf0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2ab00 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2ab10 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2ab20 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2ab30 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2ab40 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2ab50 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2ab60 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2ab70 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2ab80 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f  .  }.  sqlite3Ro
2ab90 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2aba0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32  >u.pRowSet, pIn2
2abb0 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b  ->u.i);.  break;
2abc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2abd0 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20  owSetRead P1 P2 
2abe0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2abf0 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65  is:  r[P3]=rowse
2ac00 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2ac10 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2ac20 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2ac30 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2ac40 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2ac50 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2ac60 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2ac70 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2ac80 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2ac90 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2aca0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2acb0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2acc0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2acd0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2ace0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2acf0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2ad00 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2ad10 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2ad20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2ad30 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2ad40 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2ad50 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2ad60 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2ad70 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2ad80 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2ad90 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2ada0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2adb0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2adc0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2add0 20 2d 20 31 3b 0a 20 20 20 20 56 64 62 65 42 72   - 1;.    VdbeBr
2ade0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
2adf0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
2ae00 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c  A value was pull
2ae10 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65  ed from the inde
2ae20 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  x */.    sqlite3
2ae30 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
2ae40 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
2ae50 76 61 6c 29 3b 0a 20 20 20 20 56 64 62 65 42 72  val);.    VdbeBr
2ae60 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a  anchTaken(0,2);.
2ae70 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2ae80 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2ae90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2aea0 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50  wSetTest P1 P2 P
2aeb0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
2aec0 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f  : if r[P3] in ro
2aed0 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32  wset(P1) goto P2
2aee0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2aef0 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  P3 is assumed to
2af00 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69   hold a 64-bit i
2af10 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66  nteger value. If
2af20 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
2af30 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65  contains a RowSe
2af40 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61  t object and tha
2af50 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  t RowSet object 
2af60 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20  contains.** the 
2af70 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33  value held in P3
2af80 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74  , jump to regist
2af90 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  er P2. Otherwise
2afa0 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20  , insert the.** 
2afb0 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e  integer in P3 in
2afc0 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e  to the RowSet an
2afd0 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f  d continue on to
2afe0 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63   the.** next opc
2aff0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  ode..**.** The R
2b000 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20  owSet object is 
2b010 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68  optimized for th
2b020 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63  e case where suc
2b030 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20  cessive sets.** 
2b040 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65  of integers, whe
2b050 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  re each set cont
2b060 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
2b070 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20  es. Each set.** 
2b080 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65  of values is ide
2b090 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69  ntified by a uni
2b0a0 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68  que P4 value. Th
2b0b0 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d  e first set.** m
2b0c0 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20  ust have P4==0, 
2b0d0 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34  the final set P4
2b0e0 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65  =-1.  P4 must be
2b0f0 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a   either -1 or.**
2b100 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20   non-negative.  
2b110 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  For non-negative
2b120 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e   values of P4 on
2b130 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a  ly the lower 4.*
2b140 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69  * bits are signi
2b150 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  ficant..**.** Th
2b160 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
2b170 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
2b180 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
2b190 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
2b1a0 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f  .** the rowset o
2b1b0 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
2b1c0 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
2b1d0 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
2b1e0 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
2b1f0 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
2b200 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
2b210 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
2b220 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
2b230 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
2b240 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
2b250 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
2b260 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
2b270 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
2b280 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2b290 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
2b2a0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2b2b0 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
2b2c0 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
2b2d0 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
2b2e0 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
2b2f0 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
2b300 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
2b310 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
2b320 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2b330 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
2b340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
2b350 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
2b360 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
2b370 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
2b380 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2b390 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
2b3a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2b3b0 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
2b3c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
2b3d0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2b3e0 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
2b3f0 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
2b400 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
2b410 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
2b420 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
2b430 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
2b440 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
2b450 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
2b460 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
2b470 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2b480 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2b490 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2b4a0 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49  eMemSetRowSet(pI
2b4b0 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  n1);.    if( (pI
2b4c0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2b4d0 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74  RowSet)==0 ) got
2b4e0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20  o no_mem;.  }.. 
2b4f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2b500 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
2b510 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74  ;.  assert( iSet
2b520 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20  ==-1 || iSet>=0 
2b530 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b  );.  if( iSet ){
2b540 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71  .    exists = sq
2b550 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
2b560 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2b570 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69   iSet, pIn3->u.i
2b580 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2b590 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30  hTaken(exists!=0
2b5a0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  ,2);.    if( exi
2b5b0 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20  sts ){.      pc 
2b5c0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2b5d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2b5e0 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  }.  }.  if( iSet
2b5f0 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
2b600 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2b610 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b620 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
2b630 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2b640 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b650 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
2b660 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
2b670 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2b680 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
2b690 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
2b6a0 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
2b6b0 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
2b6c0 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
2b6d0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2b6e0 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
2b6f0 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
2b700 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
2b710 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
2b720 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
2b730 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
2b740 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
2b750 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
2b760 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2b770 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
2b780 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
2b790 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
2b7a0 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
2b7b0 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
2b7c0 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
2b7d0 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
2b7e0 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
2b7f0 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
2b800 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
2b810 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
2b820 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
2b830 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
2b840 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
2b850 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
2b860 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
2b870 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2b880 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
2b890 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
2b8a0 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ogram..**.** If 
2b8b0 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P5 is non-zero, 
2b8c0 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70  then recursive p
2b8d0 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f  rogram invocatio
2b8e0 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f  n is enabled..*/
2b8f0 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d  .case OP_Program
2b900 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2b910 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  mp */.  int nMem
2b920 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2b930 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
2b940 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f  ory registers fo
2b950 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2b960 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
2b970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
2b980 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73  tes of runtime s
2b990 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
2b9a0 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2b9b0 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20  .  Mem *pRt;    
2b9c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
2b9d0 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61  gister to alloca
2b9e0 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  te runtime space
2b9f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ba10 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65   Used to iterate
2ba20 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20   through memory 
2ba30 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  cells */.  Mem *
2ba40 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
2ba50 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72     /* Last memor
2ba60 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72  y cell in new ar
2ba70 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ray */.  VdbeFra
2ba80 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
2ba90 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61   /* New vdbe fra
2baa0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e  me to execute in
2bab0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
2bac0 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
2bad0 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20   Sub-program to 
2bae0 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69  execute */.  voi
2baf0 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20  d *t;           
2bb00 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64       /* Token id
2bb10 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65  entifying trigge
2bb20 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d  r */..  pProgram
2bb30 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67   = pOp->p4.pProg
2bb40 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d  ram;.  pRt = &aM
2bb50 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2bb60 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2bb70 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f  >nOp>0 );.  .  /
2bb80 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67  * If the p5 flag
2bb90 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
2bba0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
2bbb0 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
2bbc0 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2bbd0 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
2bbe0 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28   compatibility (
2bbf0 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69  p5 is set if thi
2bc00 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20  s sub-program.  
2bc10 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74  ** is really a t
2bc20 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f  rigger, not a fo
2bc30 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
2bc40 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73  , and the flag s
2bc50 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61  et.  ** and clea
2bc60 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47  red by the "PRAG
2bc70 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69  MA recursive_tri
2bc80 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69  ggers" command i
2bc90 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a  s clear)..  ** .
2bca0 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72    ** It is recur
2bcb0 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
2bcc0 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20  of triggers, at 
2bcd0 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74  the SQL level, t
2bce0 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  hat is .  ** dis
2bcf0 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63  abled. In some c
2bd00 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72  ases a single tr
2bd10 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61  igger may genera
2bd20 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  te more than one
2bd30 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61   .  ** SubProgra
2bd40 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65  m (if the trigge
2bd50 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r may be execute
2bd60 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  d with more than
2bd70 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a   one different .
2bd80 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    ** ON CONFLICT
2bd90 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62   algorithm). Sub
2bda0 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72  Program structur
2bdb0 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
2bdc0 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  th a.  ** single
2bdd0 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76   trigger all hav
2bde0 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
2bdf0 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67   for the SubProg
2be00 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20  ram.token .  ** 
2be10 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20  variable.  */.  
2be20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
2be30 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d     t = pProgram-
2be40 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28  >token;.    for(
2be50 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2be60 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61  ; pFrame && pFra
2be70 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46  me->token!=t; pF
2be80 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2be90 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70  rent);.    if( p
2bea0 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20  Frame ) break;. 
2beb0 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72   }..  if( p->nFr
2bec0 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b  ame>=db->aLimit[
2bed0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
2bee0 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20  GGER_DEPTH] ){. 
2bef0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
2bf00 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
2bf10 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2bf20 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f  ErrMsg, db, "too
2bf30 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20   many levels of 
2bf40 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f  trigger recursio
2bf50 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  n");.    break;.
2bf60 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
2bf70 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
2bf80 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
2bf90 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
2bfa0 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
2bfb0 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
2bfc0 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
2bfd0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2bfe0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
2bff0 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
2c000 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2c010 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
2c020 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
2c030 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
2c040 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
2c050 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
2c060 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
2c070 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
2c080 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
2c090 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
2c0a0 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
2c0b0 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
2c0c0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
2c0d0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
2c0e0 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
2c0f0 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
2c100 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
2c110 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
2c120 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
2c130 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
2c140 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
2c150 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
2c160 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
2c170 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
2c180 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
2c190 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
2c1a0 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
2c1b0 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
2c1c0 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
2c1d0 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
2c1e0 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
2c1f0 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65  >nCsr;.    nByte
2c200 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
2c210 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
2c220 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
2c230 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2c250 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
2c260 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2c270 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20  or *).          
2c280 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
2c290 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75  nOnce * sizeof(u
2c2a0 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  8);.    pFrame =
2c2b0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
2c2c0 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
2c2d0 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
2c2e0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
2c2f0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
2c300 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2c310 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
2c320 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
2c330 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
2c340 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
2c350 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
2c360 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
2c370 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
2c380 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
2c390 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
2c3a0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2c3b0 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
2c3c0 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  pc;.    pFrame->
2c3d0 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
2c3e0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
2c3f0 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
2c400 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
2c410 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
2c420 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
2c430 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
2c440 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
2c450 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
2c460 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
2c470 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
2c480 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
2c490 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  ken;.    pFrame-
2c4a0 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >aOnceFlag = p->
2c4b0 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70  aOnceFlag;.    p
2c4c0 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67  Frame->nOnceFlag
2c4d0 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b   = p->nOnceFlag;
2c4e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2c4f0 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
2c500 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65  TATUS.    pFrame
2c510 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e  ->anExec = p->an
2c520 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  Exec;.#endif..  
2c530 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
2c540 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
2c550 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2c560 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
2c570 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2c580 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
2c590 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
2c5a0 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
2c5b0 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
2c5c0 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
2c5d0 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
2c5e0 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
2c5f0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
2c600 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2c610 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
2c620 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2c630 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20  >nChildMem );.  
2c640 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2c650 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2c660 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20  ->nChildCsr );. 
2c670 20 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70     assert( pc==p
2c680 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
2c690 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
2c6a0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
2c6b0 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
2c6c0 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
2c6d0 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
2c6e0 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
2c6f0 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
2c700 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68  .  pFrame->nDbCh
2c710 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43  ange = p->db->nC
2c720 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61  hange;.  p->nCha
2c730 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2c740 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2c750 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2c760 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2c770 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70  pFrame)[-1];.  p
2c780 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d  ->nMem = pFrame-
2c790 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d  >nChildMem;.  p-
2c7a0 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29  >nCursor = (u16)
2c7b0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2c7c0 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20  r;.  p->apCsr = 
2c7d0 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26  (VdbeCursor **)&
2c7e0 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b  aMem[p->nMem+1];
2c7f0 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
2c800 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
2c810 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
2c820 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e  gram->nOp;.  p->
2c830 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20  aOnceFlag = (u8 
2c840 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e  *)&p->apCsr[p->n
2c850 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f  Cursor];.  p->nO
2c860 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72  nceFlag = pProgr
2c870 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65  am->nOnce;.#ifde
2c880 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c890 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
2c8a0 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b    p->anExec = 0;
2c8b0 0a 23 65 6e 64 69 66 0a 20 20 70 63 20 3d 20 2d  .#endif.  pc = -
2c8c0 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61  1;.  memset(p->a
2c8d0 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e  OnceFlag, 0, p->
2c8e0 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62  nOnceFlag);..  b
2c8f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2c900 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20  de: Param P1 P2 
2c910 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
2c920 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2c930 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  ever present in 
2c940 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c  sub-programs cal
2c950 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20  led via the .** 
2c960 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2c970 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76  uction. Copy a v
2c980 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73  alue currently s
2c990 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72  tored in a memor
2c9a0 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68  y .** cell of th
2c9b0 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e  e calling (paren
2c9c0 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c  t) frame to cell
2c9d0 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65   P2 in the curre
2c9e0 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64  nt frames .** ad
2c9f0 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69  dress space. Thi
2ca00 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
2ca10 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f  gger programs to
2ca20 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e   access the new.
2ca30 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20  * .** and old.* 
2ca40 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  values..**.** Th
2ca50 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2ca60 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72   cell in the par
2ca70 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74  ent frame is det
2ca80 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e  ermined by addin
2ca90 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  g.** the value o
2caa0 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2cab0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
2cac0 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e  f the P1 argumen
2cad0 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c  t to the.** call
2cae0 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  ing OP_Program i
2caf0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
2cb00 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20  ase OP_Param: { 
2cb10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2cb20 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2cb30 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2cb40 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
2cb50 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  .  pFrame = p->p
2cb60 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26  Frame;.  pIn = &
2cb70 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
2cb80 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61  ->p1 + pFrame->a
2cb90 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70  Op[pFrame->pc].p
2cba0 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33  1];   .  sqlite3
2cbb0 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
2cbc0 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45  py(pOut, pIn, ME
2cbd0 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61  M_Ephem);.  brea
2cbe0 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.}..#endif /* 
2cbf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cc00 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a  MIT_TRIGGER */..
2cc10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cc20 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
2cc30 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75  /* Opcode: FkCou
2cc40 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a  nter P1 P2 * * *
2cc50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b  .** Synopsis: fk
2cc60 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a  ctr[P1]+=P2.**.*
2cc70 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63  * Increment a "c
2cc80 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
2cc90 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79  r" by P2 (P2 may
2cca0 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20   be negative or 
2ccb0 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66  positive)..** If
2ccc0 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2ccd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
2cce0 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2ccf0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
2cd00 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f  .** (deferred fo
2cd10 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2cd20 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73  aints). Otherwis
2cd30 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f  e, if P1 is zero
2cd40 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d  , the .** statem
2cd50 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  ent counter is i
2cd60 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65  ncremented (imme
2cd70 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2cd80 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a  y constraints)..
2cd90 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75  */.case OP_FkCou
2cda0 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62  nter: {.  if( db
2cdb0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
2cdc0 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20  _DeferFKs ){.   
2cdd0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2cde0 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  mCons += pOp->p2
2cdf0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
2ce00 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d  p->p1 ){.    db-
2ce10 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b  >nDeferredCons +
2ce20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
2ce30 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f  se{.    p->nFkCo
2ce40 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d  nstraint += pOp-
2ce50 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  >p2;.  }.  break
2ce60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ce70 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a  FkIfZero P1 P2 *
2ce80 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2ce90 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d  : if fkctr[P1]==
2cea0 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2ceb0 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74  This opcode test
2cec0 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b  s if a foreign k
2ced0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  ey constraint-co
2cee0 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
2cef0 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73  ly zero..** If s
2cf00 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
2cf10 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72  uction P2. Other
2cf20 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
2cf30 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a  gh to the next .
2cf40 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
2cf50 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
2cf60 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  on-zero, then th
2cf70 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2cf80 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2cf90 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
2cfa0 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74  er.** is zero (t
2cfb0 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e  he one that coun
2cfc0 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  ts deferred cons
2cfd0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
2cfe0 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  s). If P1 is.** 
2cff0 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69  zero, the jump i
2d000 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73  s taken if the s
2d010 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61  tatement constra
2d020 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a  int-counter is z
2d030 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74  ero.** (immediat
2d040 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2d050 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
2d060 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ons)..*/.case OP
2d070 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20  _FkIfZero: {    
2d080 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2d090 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
2d0a0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2d0b0 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72  aken(db->nDeferr
2d0c0 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2d0d0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2d0e0 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2d0f0 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  ( db->nDeferredC
2d100 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
2d110 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2d120 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  0 ) pc = pOp->p2
2d130 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2d140 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2d150 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
2d160 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
2d170 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
2d180 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
2d190 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2d1a0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2d1b0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63  dImmCons==0 ) pc
2d1c0 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
2d1d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d1e0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
2d1f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2d200 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
2d210 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2d220 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
2d230 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
2d240 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2d250 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
2d260 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
2d270 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
2d280 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
2d290 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
2d2a0 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
2d2b0 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
2d2c0 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
2d2d0 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
2d2e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
2d2f0 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
2d300 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
2d310 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
2d320 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2d330 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
2d340 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
2d350 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
2d360 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
2d370 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2d380 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2d390 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
2d3a0 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
2d3b0 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
2d3c0 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
2d3d0 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
2d3e0 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
2d3f0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2d400 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
2d410 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
2d420 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
2d430 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
2d440 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
2d450 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2d460 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
2d470 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
2d480 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
2d490 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
2d4a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2d4b0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
2d4c0 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
2d4d0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2d4e0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
2d4f0 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
2d500 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
2d510 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
2d520 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
2d530 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
2d540 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
2d550 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
2d560 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
2d570 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2d580 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2d590 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
2d5a0 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
2d5b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d5c0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
2d5d0 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2d5e0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
2d5f0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2d600 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ger..** If the v
2d610 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2d620 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2d630 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ter, jump to P2 
2d640 61 6e 64 0a 2a 2a 20 61 64 64 20 74 68 65 20 6c  and.** add the l
2d650 69 74 65 72 61 6c 20 76 61 6c 75 65 20 50 33 20  iteral value P3 
2d660 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  to register P1..
2d670 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69  **.** If the ini
2d680 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65  tial value of re
2d690 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
2d6a0 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74  s than 1, then t
2d6b0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75  he.** value is u
2d6c0 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e  nchanged and con
2d6d0 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f  trol passes thro
2d6e0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2d6f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2d700 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
2d710 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2d720 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2d730 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2d740 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2d750 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2d760 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2d770 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30  ken( pIn1->u.i>0
2d780 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2d790 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20  ->u.i>0 ){.     
2d7a0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2d7b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2d7c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
2d7d0 65 67 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  eg P1 P2 P3 * *.
2d7e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2d7f0 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d  1]+=P3, if r[P1]
2d800 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  <0 goto P2.**.**
2d810 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
2d820 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2d830 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2d840 61 6c 20 50 33 20 74 6f 20 74 68 65 20 76 61 6c  al P3 to the val
2d850 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  ue in.** registe
2d860 72 20 50 31 20 74 68 65 6e 20 69 66 20 74 68 65  r P1 then if the
2d870 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2d880 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2d890 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  an zero, jump to
2d8a0 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50   P2. .*/.case OP
2d8b0 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20  _IfNeg: {       
2d8c0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2d8d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2d8e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2d8f0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2d900 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e  MEM_Int );.  pIn
2d910 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
2d920 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  3;.  VdbeBranchT
2d930 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30  aken(pIn1->u.i<0
2d940 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2d950 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20  ->u.i<0 ){.     
2d960 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2d970 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2d980 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
2d990 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20  otZero P1 P2 P3 
2d9a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2d9b0 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65   if r[P1]!=0 the
2d9c0 6e 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 67 6f 74  n r[P1]+=P3, got
2d9d0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2d9e0 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2d9f0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2da00 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   If the content 
2da10 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2da20 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e  s.** initially n
2da30 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e 20 61 64 64  onzero, then add
2da40 20 50 33 20 74 6f 20 50 31 20 61 6e 64 20 6a 75   P3 to P1 and ju
2da50 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65  mp to P2.  If re
2da60 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20  gister P1 is.** 
2da70 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20  initially zero, 
2da80 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67  leave it unchang
2da90 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  ed and fall thro
2daa0 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ugh..*/.case OP_
2dab0 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20  IfNotZero: {    
2dac0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2dad0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2dae0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2daf0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2db00 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2db10 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2db20 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b  pIn1->u.i<0, 2);
2db30 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2db40 20 29 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75   ){.     pIn1->u
2db50 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i += pOp->p3;. 
2db60 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2db70 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2db80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2db90 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31   DecrJumpZero P1
2dba0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2dbb0 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50  opsis: if (--r[P
2dbc0 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  1])==0 goto P2.*
2dbd0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
2dbe0 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e   must hold an in
2dbf0 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e  teger.  Decremen
2dc00 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
2dc10 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 74 68  egister P1.** th
2dc20 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66  en jump to P2 if
2dc30 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
2dc40 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a  s exactly zero..
2dc50 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a  */.case OP_DecrJ
2dc60 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  umpZero: {      
2dc70 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2dc80 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2dc90 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2dca0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2dcb0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31  EM_Int );.  pIn1
2dcc0 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42  ->u.i--;.  VdbeB
2dcd0 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
2dce0 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  >u.i==0, 2);.  i
2dcf0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20  f( pIn1->u.i==0 
2dd00 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2dd10 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2dd20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
2dd30 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e  code: JumpZeroIn
2dd40 63 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  cr P1 P2 * * *.*
2dd50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28  * Synopsis: if (
2dd60 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f  r[P1]++)==0 ) go
2dd70 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  to P2.**.** The 
2dd80 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
2dd90 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2dda0 67 65 72 2e 20 20 49 66 20 72 65 67 69 73 74 65  ger.  If registe
2ddb0 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
2ddc0 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20  y.** zero, then 
2ddd0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e 63  jump to P2.  Inc
2dde0 72 65 6d 65 6e 74 20 72 65 67 69 73 74 65 72 20  rement register 
2ddf0 50 31 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  P1 regardless of
2de00 20 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e   whether or.** n
2de10 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
2de20 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  aken..*/.case OP
2de30 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b  _JumpZeroIncr: {
2de40 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2de50 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2de60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2de70 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2de80 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2de90 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2dea0 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  ken(pIn1->u.i==0
2deb0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
2dec0 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 7b 0a  1->u.i++)==0 ){.
2ded0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
2dee0 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
2def0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2df00 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
2df10 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2df20 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
2df30 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
2df40 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2df50 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
2df60 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
2df70 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
2df80 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
2df90 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
2dfa0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
2dfb0 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75  ncDef.** structu
2dfc0 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
2dfd0 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
2dfe0 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a   Use register.**
2dff0 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75 6d   P3 as the accum
2e000 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
2e010 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
2e020 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
2e030 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
2e040 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
2e050 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  .*/.case OP_AggS
2e060 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  tep: {.  int n;.
2e070 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
2e080 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65  pMem;.  Mem *pRe
2e090 63 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73 71  c;.  Mem t;.  sq
2e0a0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74  lite3_context ct
2e0b0 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  x;.  sqlite3_val
2e0c0 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e  ue **apVal;..  n
2e0d0 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73   = pOp->p5;.  as
2e0e0 73 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20  sert( n>=0 );.  
2e0f0 70 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pRec = &aMem[pOp
2e100 2d 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d  ->p2];.  apVal =
2e110 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73   p->apArg;.  ass
2e120 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d  ert( apVal || n=
2e130 3d 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  =0 );.  for(i=0;
2e140 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b   i<n; i++, pRec+
2e150 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
2e160 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29  memIsValid(pRec)
2e170 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d   );.    apVal[i]
2e180 20 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d   = pRec;.    mem
2e190 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2e1a0 20 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74   pRec);.  }.  ct
2e1b0 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  x.pFunc = pOp->p
2e1c0 34 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72  4.pFunc;.  asser
2e1d0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2e1e0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2e1f0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2e200 0a 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d  .  ctx.pMem = pM
2e210 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2e220 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  p3];.  pMem->n++
2e230 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2e240 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d  emInit(&t, db, M
2e250 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e  EM_Null);.  ctx.
2e260 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 63 74 78  pOut = &t;.  ctx
2e270 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
2e280 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20  ctx.pVdbe = p;. 
2e290 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20   ctx.iOp = pc;. 
2e2a0 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20   ctx.skipFlag = 
2e2b0 30 3b 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d  0;.  (ctx.pFunc-
2e2c0 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c  >xStep)(&ctx, n,
2e2d0 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
2e2e0 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
2e2f0 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  /.  if( ctx.isEr
2e300 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
2e310 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2e320 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2e330 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
2e340 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20  _text(&t));.    
2e350 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72  rc = ctx.isError
2e360 3b 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e  ;.  }.  if( ctx.
2e370 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20  skipFlag ){.    
2e380 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2e390 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
2e3a0 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f  eq );.    i = pO
2e3b0 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66  p[-1].p1;.    if
2e3c0 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62  ( i ) sqlite3Vdb
2e3d0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
2e3e0 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20  em[i], 1);.  }. 
2e3f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2e400 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 62 72  elease(&t);.  br
2e410 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e420 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
2e430 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
2e440 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
2e450 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
2e460 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
2e470 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
2e480 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
2e490 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
2e4a0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
2e4b0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
2e4c0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
2e4d0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
2e4e0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
2e4f0 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
2e500 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2e510 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
2e520 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2e530 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
2e540 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
2e550 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
2e560 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
2e570 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
2e580 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
2e590 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
2e5a0 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
2e5b0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
2e5c0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
2e5d0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
2e5e0 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
2e5f0 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
2e600 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
2e610 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
2e620 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
2e630 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
2e640 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
2e650 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
2e660 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
2e670 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e680 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
2e690 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2e6a0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
2e6b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2e6c0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
2e6d0 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
2e6e0 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
2e6f0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
2e700 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
2e710 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
2e720 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
2e730 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2e740 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2e750 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
2e760 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
2e770 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d  text(pMem));.  }
2e780 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2e790 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
2e7a0 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
2e7b0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2e7c0 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
2e7d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
2e7e0 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
2e7f0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2e800 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2e810 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e820 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
2e830 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
2e840 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2e850 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
2e860 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
2e870 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
2e880 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
2e890 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
2e8a0 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
2e8b0 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
2e8c0 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
2e8d0 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54  E, FULL,.** REST
2e8e0 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45  ART, or TRUNCATE
2e8f0 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20  .  Write 1 or 0 
2e900 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20  into mem[P3] if 
2e910 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72  the checkpoint r
2e920 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45  eturns.** SQLITE
2e930 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65  _BUSY or not, re
2e940 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69  spectively.  Wri
2e950 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
2e960 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a   pages in the.**
2e970 20 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63   WAL after the c
2e980 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d  heckpoint into m
2e990 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65  em[P3+1] and the
2e9a0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2e9b0 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74  .** in the WAL t
2e9c0 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68  hat have been ch
2e9d0 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72  eckpointed after
2e9e0 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a   the checkpoint.
2e9f0 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74  ** completes int
2ea00 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f  o mem[P3+2].  Ho
2ea10 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f  wever on an erro
2ea20 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  r, mem[P3+1] and
2ea30 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72  .** mem[P3+2] ar
2ea40 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
2ea50 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   -1..*/.case OP_
2ea60 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20  Checkpoint: {.  
2ea70 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea90 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
2eaa0 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d  */.  int aRes[3]
2eab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2eac0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20       /* Results 
2ead0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaf0 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65       /* Write re
2eb00 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20  sults here */.. 
2eb10 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2eb20 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65  Only==0 );.  aRe
2eb30 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
2eb40 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
2eb50 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
2eb60 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2eb70 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2eb80 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
2eb90 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2eba0 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
2ebb0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2ebc0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2ebd0 52 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c  RESTART.       |
2ebe0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2ebf0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55  E_CHECKPOINT_TRU
2ec00 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20  NCATE.  );.  rc 
2ec10 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  = sqlite3Checkpo
2ec20 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  int(db, pOp->p1,
2ec30 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b   pOp->p2, &aRes[
2ec40 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20  1], &aRes[2]);. 
2ec50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2ec60 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20 3d  BUSY ){.    rc =
2ec70 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
2ec80 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d  aRes[0] = 1;.  }
2ec90 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d  .  for(i=0, pMem
2eca0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2ecb0 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65  ]; i<3; i++, pMe
2ecc0 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  m++){.    sqlite
2ecd0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2ece0 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73  (pMem, (i64)aRes
2ecf0 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20  [i]);.  }    .  
2ed00 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64  break;.};  .#end
2ed10 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
2ed20 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f  TE_OMIT_PRAGMA./
2ed30 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61  * Opcode: Journa
2ed40 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a  lMode P1 P2 P3 *
2ed50 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20   *.**.** Change 
2ed60 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  the journal mode
2ed70 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20   of database P1 
2ed80 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62  to P3. P3 must b
2ed90 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20  e one of the.** 
2eda0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2edb0 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66  E_XXX values. If
2edc0 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65   changing betwee
2edd0 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f  n the various ro
2ede0 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20  llback.** modes 
2edf0 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74  (delete, truncat
2ee00 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20  e, persist, off 
2ee10 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69  and memory), thi
2ee20 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a  s is a simple.**
2ee30 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49   operation. No I
2ee40 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  O is required..*
2ee50 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67  *.** If changing
2ee60 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20   into or out of 
2ee70 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f  WAL mode the pro
2ee80 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63  cedure is more c
2ee90 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a  omplicated..**.*
2eea0 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67  * Write a string
2eeb0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
2eec0 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  final journal-mo
2eed0 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  de to register P
2eee0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f  2..*/.case OP_Jo
2eef0 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20  urnalMode: {    
2ef00 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
2ef10 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
2ef20 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
2ef30 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
2ef40 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
2ef50 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
2ef60 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef80 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
2ef90 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
2efa0 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
2efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efc0 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
2efd0 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
2efe0 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
2eff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2f000 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
2f010 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
2f020 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2f030 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
2f040 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
2f050 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
2f060 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
2f070 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
2f080 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
2f090 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
2f0a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f0b0 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
2f0c0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2f0d0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
2f0e0 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
2f0f0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2f100 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
2f110 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
2f120 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f130 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
2f140 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2f150 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
2f160 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2f170 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f180 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
2f190 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2f1a0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
2f1b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2f1c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2f1d0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2f1e0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2f1f0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42  Only==0 );..  pB
2f200 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
2f210 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
2f220 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
2f230 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
2f240 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
2f250 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
2f260 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
2f270 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2f280 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
2f290 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
2f2a0 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
2f2b0 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
2f2c0 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
2f2d0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
2f2e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2f2f0 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
2f300 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
2f310 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c  Filename(pPager,
2f320 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f   1);..  /* Do no
2f330 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
2f340 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
2f350 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
2f360 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
2f370 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
2f380 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
2f390 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
2f3a0 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
2f3b0 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
2f3c0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f3d0 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71  DE_WAL.   && (sq
2f3e0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
2f3f0 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20  ilename)==0     
2f400 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
2f410 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
2f420 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
2f430 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
2f440 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
2f450 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
2f460 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
2f470 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
2f480 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
2f490 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
2f4a0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f4b0 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
2f4c0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2f4d0 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
2f4e0 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
2f4f0 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  t || db->nVdbeRe
2f500 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63  ad>1 ){.      rc
2f510 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2f520 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
2f530 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2f540 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20  Msg, db, .      
2f550 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e      "cannot chan
2f560 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66  ge %s wal mode f
2f570 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61  rom within a tra
2f580 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20  nsaction",.     
2f590 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45       (eNew==PAGE
2f5a0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
2f5b0 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75  L ? "into" : "ou
2f5c0 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a  t of").      );.
2f5d0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2f5e0 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20   }else{. .      
2f5f0 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
2f600 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
2f610 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
2f620 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64   leaving WAL mod
2f630 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67  e, close the log
2f640 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73   file. If succes
2f650 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20  sful, the call. 
2f660 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67         ** to Pag
2f670 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65  erCloseWal() che
2f680 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c  ckpoints and del
2f690 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61  etes the write-a
2f6a0 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20  head-log .      
2f6b0 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58    ** file. An EX
2f6c0 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79  CLUSIVE lock may
2f6d0 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f   still be held o
2f6e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2f6f0 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  ile .        ** 
2f700 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66  after a successf
2f710 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20  ul return. .    
2f720 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72      */.        r
2f730 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
2f740 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29  CloseWal(pPager)
2f750 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
2f760 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2f770 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
2f780 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
2f790 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
2f7a0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
2f7b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c     }else if( eOl
2f7c0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
2f7d0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20  MODE_MEMORY ){. 
2f7e0 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74         /* Cannot
2f7f0 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65   transition dire
2f800 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59  ctly from MEMORY
2f810 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f   to WAL.  Use mo
2f820 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a  de OFF.        *
2f830 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64  * as an intermed
2f840 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  iate */.        
2f850 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
2f860 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2f870 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  r, PAGER_JOURNAL
2f880 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20  MODE_OFF);.     
2f890 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f   }.  .      /* O
2f8a0 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  pen a transactio
2f8b0 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
2f8c0 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65  e file. Regardle
2f8d0 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  ss of the journa
2f8e0 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c  l.      ** mode,
2f8f0 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
2f900 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20  n always uses a 
2f910 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
2f920 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
2f930 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
2f940 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
2f950 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  Bt)==0 );.      
2f960 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2f970 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
2f980 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
2f990 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65  tVersion(pBt, (e
2f9a0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f9b0 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a  ALMODE_WAL ? 2 :
2f9c0 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   1));.      }.  
2f9d0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
2f9e0 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
2f9f0 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69  OMIT_WAL */..  i
2fa00 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65  f( rc ){.    eNe
2fa10 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20  w = eOld;.  }.  
2fa20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61  eNew = sqlite3Pa
2fa30 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
2fa40 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
2fa50 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
2fa60 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
2fa70 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
2fa80 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
2fa90 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
2faa0 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69  z = (char *)sqli
2fab0 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
2fac0 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74  me(eNew);.  pOut
2fad0 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ->n = sqlite3Str
2fae0 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a  len30(pOut->z);.
2faf0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
2fb00 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c  LITE_UTF8;.  sql
2fb10 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2fb20 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
2fb30 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
2fb40 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
2fb50 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
2fb60 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   */..#if !define
2fb70 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41  d(SQLITE_OMIT_VA
2fb80 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65  CUUM) && !define
2fb90 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54  d(SQLITE_OMIT_AT
2fba0 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TACH)./* Opcode:
2fbb0 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a 20   Vacuum * * * * 
2fbc0 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74  *.**.** Vacuum t
2fbd0 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
2fbe0 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  se.  This opcode
2fbf0 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68 65   will cause othe
2fc00 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61 63  r virtual.** mac
2fc10 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65 61  hines to be crea
2fc20 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49 74  ted and run.  It
2fc30 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c 6c   may not be call
2fc40 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a 2a  ed from within.*
2fc50 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  * a transaction.
2fc60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75  .*/.case OP_Vacu
2fc70 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  um: {.  assert( 
2fc80 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2fc90 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2fca0 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
2fcb0 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62 72  rrMsg, db);.  br
2fcc0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
2fcd0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2fce0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2fcf0 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
2fd00 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
2fd10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
2fd20 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
2fd30 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
2fd40 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
2fd50 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
2fd60 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
2fd70 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
2fd80 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
2fd90 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
2fda0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
2fdb0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2fdc0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
2fdd0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2fde0 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
2fdf0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2fe00 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
2fe10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2fe20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2fe30 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2fe40 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2fe50 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2fe60 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
2fe70 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2fe80 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
2fe90 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2fea0 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
2feb0 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
2fec0 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
2fed0 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
2fee0 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
2fef0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
2ff00 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
2ff10 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2ff20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2ff30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2ff40 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
2ff50 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
2ff60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
2ff70 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
2ff80 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65  ements to expire
2ff90 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72  .  When an expir
2ffa0 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20  ed statement.** 
2ffb0 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e  is executed usin
2ffc0 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  g sqlite3_step()
2ffd0 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20   it will either 
2ffe0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a  automatically.**
2fff0 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c   reprepare itsel
30000 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69  f (if it was ori
30010 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20  ginally created 
30020 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  using sqlite3_pr
30030 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f  epare_v2()).** o
30040 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77  r it will fail w
30050 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  ith SQLITE_SCHEM
30060 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20  A..** .** If P1 
30070 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53  is 0, then all S
30080 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65  QL statements be
30090 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66  come expired. If
300a0 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
300b0 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  .** then only th
300c0 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63  e currently exec
300d0 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  uting statement 
300e0 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63  is expired..*/.c
300f0 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b  ase OP_Expire: {
30100 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20  .  if( !pOp->p1 
30110 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  ){.    sqlite3Ex
30120 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
30130 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65  ements(db);.  }e
30140 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69  lse{.    p->expi
30150 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62  red = 1;.  }.  b
30160 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
30170 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
30180 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63  RED_CACHE./* Opc
30190 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50  ode: TableLock P
301a0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
301b0 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31  Synopsis: iDb=P1
301c0 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50   root=P2 write=P
301d0 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61  3.**.** Obtain a
301e0 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69   lock on a parti
301f0 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69  cular table. Thi
30200 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
30210 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a   only used when.
30220 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  ** the shared-ca
30230 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65  che feature is e
30240 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50  nabled. .**.** P
30250 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
30260 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
30270 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20  n sqlite3.aDb[] 
30280 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
30290 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  ** on which the 
302a0 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
302b0 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73  .  A readlock is
302c0 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d   obtained if P3=
302d0 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65  =0 or.** a write
302e0 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a   lock if P3==1..
302f0 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e  **.** P2 contain
30300 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  s the root-page 
30310 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
30320 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63  lock..**.** P4 c
30330 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
30340 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
30350 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
30360 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73   locked. This is
30370 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f   only.** used to
30380 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72   generate an err
30390 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68  or message if th
303a0 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65  e lock cannot be
303b0 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61   obtained..*/.ca
303c0 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a  se OP_TableLock:
303d0 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c   {.  u8 isWriteL
303e0 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ock = (u8)pOp->p
303f0 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65  3;.  if( isWrite
30400 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e  Lock || 0==(db->
30410 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61  flags&SQLITE_Rea
30420 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b  dUncommitted) ){
30430 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
30440 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
30450 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
30460 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
30470 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
30480 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
30490 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  p1) );.    asser
304a0 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
304b0 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
304c0 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==1 );.    rc = 
304d0 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b  sqlite3BtreeLock
304e0 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31  Table(db->aDb[p1
304f0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ].pBt, pOp->p2, 
30500 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20  isWriteLock);.  
30510 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d    if( (rc&0xFF)=
30520 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
30530 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
30540 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ar *z = pOp->p4.
30550 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  z;.      sqlite3
30560 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
30570 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74 61  rrMsg, db, "data
30580 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f  base table is lo
30590 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20  cked: %s", z);. 
305a0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
305b0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
305c0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
305d0 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64  _CACHE */..#ifnd
305e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
305f0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
30600 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20  pcode: VBegin * 
30610 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
30620 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74  4 may be a point
30630 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
30640 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
30650 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65   If so, call the
30660 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68   .** xBegin meth
30670 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
30680 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77  e..**.** Also, w
30690 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34  hether or not P4
306a0 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74   is set, check t
306b0 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  hat this is not 
306c0 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f  being called fro
306d0 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61  m.** within a ca
306e0 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74  llback to a virt
306f0 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28  ual table xSync(
30700 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20  ) method. If it 
30710 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a  is, the error.**
30720 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65   code will be se
30730 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  t to SQLITE_LOCK
30740 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ED..*/.case OP_V
30750 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c  Begin: {.  VTabl
30760 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61  e *pVTab;.  pVTa
30770 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
30780 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  b;.  rc = sqlite
30790 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70  3VtabBegin(db, p
307a0 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54  VTab);.  if( pVT
307b0 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62  ab ) sqlite3Vtab
307c0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
307d0 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20  pVTab->pVtab);. 
307e0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
307f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
30800 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
30810 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30820 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30830 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72  E./* Opcode: VCr
30840 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  eate P1 * * P4 *
30850 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
30860 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
30870 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
30880 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74 68  base P1. Call th
30890 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64  e xCreate method
308a0 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61 62  .** for that tab
308b0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
308c0 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20 3d  Create: {.  rc =
308d0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
308e0 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e  Create(db, pOp->
308f0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26  p1, pOp->p4.z, &
30900 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 62  p->zErrMsg);.  b
30910 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
30920 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
30930 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
30940 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30950 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
30960 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74  /* Opcode: VDest
30970 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  roy P1 * * P4 *.
30980 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
30990 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
309a0 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
309b0 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68  ase P1.  Call th
309c0 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  e xDestroy metho
309d0 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  d.** of that tab
309e0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
309f0 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e  Destroy: {.  p->
30a00 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 32  inVtabMethod = 2
30a10 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
30a20 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
30a30 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
30a40 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e  ->p4.z);.  p->in
30a50 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
30a60 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30a70 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
30a80 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
30a90 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
30aa0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30ab0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f  LE./* Opcode: VO
30ac0 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  pen P1 * * P4 *.
30ad0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
30ae0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
30af0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
30b00 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
30b10 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50   structure..** P
30b20 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75  1 is a cursor nu
30b30 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f  mber.  This opco
30b40 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f  de opens a curso
30b50 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c  r to the virtual
30b60 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74  .** table and st
30b70 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72  ores that cursor
30b80 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20   in P1..*/.case 
30b90 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  OP_VOpen: {.  Vd
30ba0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
30bb0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
30bc0 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73  ursor *pVtabCurs
30bd0 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  or;.  sqlite3_vt
30be0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c  ab *pVtab;.  sql
30bf0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
30c00 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  dule;..  assert(
30c10 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
30c20 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70  .  pCur = 0;.  p
30c30 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a  VtabCursor = 0;.
30c40 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
30c50 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
30c60 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
30c70 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
30c80 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
30c90 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26 20  assert(pVtab && 
30ca0 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20 3d  pModule);.  rc =
30cb0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
30cc0 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72  pVtab, &pVtabCur
30cd0 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  sor);.  sqlite3V
30ce0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
30cf0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
30d00 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29   SQLITE_OK==rc )
30d10 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  {.    /* Initial
30d20 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ize sqlite3_vtab
30d30 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61  _cursor base cla
30d40 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43  ss */.    pVtabC
30d50 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70  ursor->pVtab = p
30d60 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e  Vtab;..    /* In
30d70 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75  itialize vdbe cu
30d80 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
30d90 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61     pCur = alloca
30da0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
30db0 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a  >p1, 0, -1, 0);.
30dc0 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a      if( pCur ){.
30dd0 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61        pCur->pVta
30de0 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43  bCursor = pVtabC
30df0 75 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  ursor;.    }else
30e00 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c  {.      db->mall
30e10 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
30e20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
30e30 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
30e40 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
30e50 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30e60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30e70 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30e80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30e90 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
30ea0 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
30eb0 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
30ec0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c  ** Synopsis: ipl
30ed0 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27  an=r[P3] zplan='
30ee0 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P4'.**.** P1 is 
30ef0 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
30f00 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
30f10 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
30f20 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
30f30 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
30f40 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
30f50 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
30f60 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
30f70 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
30f80 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
30f90 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
30fa0 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
30fb0 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
30fc0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
30fd0 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
30fe0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
30ff0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
31000 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
31010 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
31020 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
31030 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
31040 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
31050 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
31060 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
31070 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
31080 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
31090 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
310a0 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
310b0 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
310c0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
310d0 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
310e0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
310f0 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
31100 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
31110 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
31120 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
31130 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
31140 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
31150 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
31160 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
31170 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
31180 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
31190 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
311a0 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
311b0 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
311c0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
311d0 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
311e0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
311f0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
31200 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
31210 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
31220 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
31230 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
31240 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
31250 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
31260 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
31270 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c  tabCursor;.  sql
31280 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
31290 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
312a0 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
312b0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
312c0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
312d0 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
312e0 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
312f0 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
31300 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
31310 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31320 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
31330 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
31340 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
31350 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
31360 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
31370 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61 62  ursor );.  pVtab
31380 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e 70  Cursor = pCur->p
31390 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70 56  VtabCursor;.  pV
313a0 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73 6f  tab = pVtabCurso
313b0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
313c0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
313d0 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62  dule;..  /* Grab
313e0 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65   the index numbe
313f0 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d  r and argc param
31400 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72  eters */.  asser
31410 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67  t( (pQuery->flag
31420 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26  s&MEM_Int)!=0 &&
31430 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d   pArgc->flags==M
31440 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67  EM_Int );.  nArg
31450 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75   = (int)pArgc->u
31460 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28  .i;.  iQuery = (
31470 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b  int)pQuery->u.i;
31480 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
31490 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
314a0 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73 20   */.  {.    res 
314b0 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  = 0;.    apArg =
314c0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 66   p->apArg;.    f
314d0 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
314e0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 70  ; i++){.      ap
314f0 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
31500 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  i+1];.    }..   
31510 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
31520 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 70   = 1;.    rc = p
31530 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
31540 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51 75  pVtabCursor, iQu
31550 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ery, pOp->p4.z, 
31560 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20  nArg, apArg);.  
31570 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
31580 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  d = 0;.    sqlit
31590 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
315a0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
315b0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
315c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 73  _OK ){.      res
315d0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
315e0 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  (pVtabCursor);. 
315f0 20 20 20 7d 0a 20 20 20 20 56 64 62 65 42 72 61     }.    VdbeBra
31600 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
31610 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
31620 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
31630 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 7d  p->p2 - 1;.    }
31640 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  .  }.  pCur->nul
31650 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72 65  lRow = 0;..  bre
31660 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31670 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
31680 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
31690 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
316a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
316b0 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
316c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
316d0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
316e0 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a  =vcolumn(P2).**.
316f0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
31700 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
31710 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
31720 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
31730 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
31740 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
31750 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
31760 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
31770 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
31780 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
31790 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
317a0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
317b0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
317c0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
317d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
317e0 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
317f0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
31800 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
31810 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
31820 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  r->pVtabCursor )
31830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
31840 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
31850 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
31860 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
31870 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
31880 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
31890 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
318a0 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
318b0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
318c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
318d0 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
318e0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
318f0 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
31900 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
31910 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
31920 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
31930 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
31940 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
31950 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
31960 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
31970 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75  ;.  sContext.pOu
31980 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d  t = pDest;.  Mem
31990 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
319a0 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
319b0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
319c0 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
319d0 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
319e0 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
319f0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
31a00 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
31a10 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
31a20 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
31a30 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
31a40 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  sError;.  }.  sq
31a50 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
31a60 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65  ncoding(pDest, e
31a70 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49  ncoding);.  REGI
31a80 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
31a90 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50  p3, pDest);.  UP
31aa0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
31ab0 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28  E(pDest);..  if(
31ac0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
31ad0 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a  ooBig(pDest) ){.
31ae0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
31af0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31b00 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
31b10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31b20 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
31b30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
31b40 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
31b50 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
31b60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
31b70 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
31b80 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
31b90 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
31ba0 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
31bb0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
31bc0 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
31bd0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
31be0 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
31bf0 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
31c00 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
31c10 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
31c20 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
31c30 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
31c40 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
31c50 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
31c60 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
31c70 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
31c80 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
31c90 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43  int res;.  VdbeC
31ca0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
31cb0 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20  res = 0;.  pCur 
31cc0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
31cd0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
31ce0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
31cf0 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
31d00 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
31d10 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
31d20 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43  b = pCur->pVtabC
31d30 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
31d40 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
31d50 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
31d60 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  rt( pModule->xNe
31d70 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  xt );..  /* Invo
31d80 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d  ke the xNext() m
31d90 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
31da0 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  ule. There is no
31db0 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a   way for the.  *
31dc0 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70  * underlying imp
31dd0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72  lementation to r
31de0 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
31df0 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72  f one occurs dur
31e00 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29  ing.  ** xNext()
31e10 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e  . Instead, if an
31e20 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74   error occurs, t
31e30 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  rue is returned 
31e40 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74  (indicating that
31e50 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61   .  ** data is a
31e60 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68  vailable) and th
31e70 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74  e error code ret
31e80 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75  urned when xColu
31e90 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20  mn or.  ** some 
31ea0 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20  other method is 
31eb0 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  next invoked on 
31ec0 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c  the save virtual
31ed0 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20   table cursor.. 
31ee0 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d   */.  p->inVtabM
31ef0 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20  ethod = 1;.  rc 
31f00 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  = pModule->xNext
31f10 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73  (pCur->pVtabCurs
31f20 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  or);.  p->inVtab
31f30 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71  Method = 0;.  sq
31f40 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
31f50 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
31f60 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
31f70 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20  E_OK ){.    res 
31f80 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
31f90 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31fa0 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  r);.  }.  VdbeBr
31fb0 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32  anchTaken(!res,2
31fc0 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  );.  if( !res ){
31fd0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
31fe0 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
31ff0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d  o P2 */.    pc =
32000 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
32010 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
32020 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
32030 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
32040 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32050 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
32060 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
32070 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
32080 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
32090 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
320a0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
320b0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
320c0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
320d0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
320e0 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
320f0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
32100 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
32110 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
32120 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
32130 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
32140 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
32150 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
32160 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
32170 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
32180 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
32190 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65  tab *pVtab;.  Me
321a0 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74  m *pName;..  pVt
321b0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
321c0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61  ab->pVtab;.  pNa
321d0 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  me = &aMem[pOp->
321e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
321f0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
32200 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65  Rename );.  asse
32210 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
32220 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72  Name) );.  asser
32230 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
32240 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  0 );.  REGISTER_
32250 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
32260 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28  Name);.  assert(
32270 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20   pName->flags & 
32280 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73  MEM_Str );.  tes
32290 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
322a0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
322b0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
322c0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
322d0 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65  _UTF16BE );.  te
322e0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
322f0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
32300 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  LE );.  rc = sql
32310 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
32320 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51  coding(pName, SQ
32330 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66  LITE_UTF8);.  if
32340 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
32350 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61  ){.    rc = pVta
32360 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
32370 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65  ame(pVtab, pName
32380 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ->z);.    sqlite
32390 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
323a0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
323b0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
323c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
323d0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
323e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
323f0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
32400 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50  de: VUpdate P1 P
32410 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
32420 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50  nopsis: data=r[P
32430 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69  3@P2].**.** P4 i
32440 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
32450 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
32460 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
32470 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
32480 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
32490 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
324a0 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61  responding xUpda
324b0 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61  te method. P2 va
324c0 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  lues.** are cont
324d0 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65  iguous memory ce
324e0 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  lls starting at 
324f0 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  P3 to pass to th
32500 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e  e xUpdate .** in
32510 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61  vocation. The va
32520 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
32530 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73  (P3+P2-1) corres
32540 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a  ponds to the .**
32550 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66   p2th element of
32560 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20   the argv array 
32570 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74  passed to xUpdat
32580 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70  e..**.** The xUp
32590 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c  date method will
325a0 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20   do a DELETE or 
325b0 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74  an INSERT or bot
325c0 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30  h..** The argv[0
325d0 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68  ] element (which
325e0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
325f0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a  memory cell P3).
32600 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  ** is the rowid 
32610 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  of a row to dele
32620 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20  te.  If argv[0] 
32630 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20  is NULL then no 
32640 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63  .** deletion occ
32650 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31  urs.  The argv[1
32660 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65  ] element is the
32670 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65   rowid of the ne
32680 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73  w .** row.  This
32690 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20   can be NULL to 
326a0 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c  have the virtual
326b0 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68   table select th
326c0 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20  e new .** rowid 
326d0 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65  for itself.  The
326e0 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d   subsequent elem
326f0 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61  ents in the arra
32700 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61  y are .** the va
32710 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  lues of columns 
32720 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a  in the new row..
32730 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74  **.** If P2==1 t
32740 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73  hen no insert is
32750 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67   performed.  arg
32760 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69  v[0] is the rowi
32770 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f  d of.** a row to
32780 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50   delete..**.** P
32790 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66  1 is a boolean f
327a0 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65  lag. If it is se
327b0 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68  t to true and th
327c0 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a  e xUpdate call.*
327d0 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c  * is successful,
327e0 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
327f0 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
32800 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
32810 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73  rowid() .** is s
32820 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
32830 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72  of the rowid for
32840 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e   the row just in
32850 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35  serted..**.** P5
32860 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63   is the error ac
32870 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63  tions (OE_Replac
32880 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49  e, OE_Fail, OE_I
32890 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a  gnore, etc) to.*
328a0 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63  * apply in the c
328b0 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61  ase of a constra
328c0 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61  int failure on a
328d0 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61  n insert or upda
328e0 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  te..*/.case OP_V
328f0 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69  Update: {.  sqli
32900 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
32910 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
32920 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
32930 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
32940 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
32950 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
32960 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
32970 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
32980 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
32990 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
329a0 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
329b0 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
329c0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
329d0 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
329e0 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
329f0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
32a00 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
32a10 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
32a20 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
32a30 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
32a40 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
32a50 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75   = (sqlite3_modu
32a60 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64  le *)pVtab->pMod
32a70 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f  ule;.  nArg = pO
32a80 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
32a90 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
32aa0 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41  _VTAB );.  if( A
32ab0 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78  LWAYS(pModule->x
32ac0 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75  Update) ){.    u
32ad0 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  8 vtabOnConflict
32ae0 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e   = db->vtabOnCon
32af0 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67  flict;.    apArg
32b00 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20   = p->apArg;.   
32b10 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d   pX = &aMem[pOp-
32b20 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  >p3];.    for(i=
32b30 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
32b40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
32b50 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b  emIsValid(pX) );
32b60 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
32b70 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a  oChange(p, pX);.
32b80 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d        apArg[i] =
32b90 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b   pX;.      pX++;
32ba0 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76  .    }.    db->v
32bb0 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
32bc0 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20  pOp->p5;.    rc 
32bd0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  = pModule->xUpda
32be0 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20  te(pVtab, nArg, 
32bf0 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a  apArg, &rowid);.
32c00 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
32c10 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43  nflict = vtabOnC
32c20 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c  onflict;.    sql
32c30 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
32c40 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
32c50 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
32c60 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31  TE_OK && pOp->p1
32c70 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
32c80 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72  ( nArg>1 && apAr
32c90 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30  g[0] && (apArg[0
32ca0 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c  ]->flags&MEM_Nul
32cb0 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  l) );.      db->
32cc0 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
32cd0 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20  Rowid = rowid;. 
32ce0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63     }.    if( (rc
32cf0 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
32d00 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70  ONSTRAINT && pOp
32d10 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e  ->p4.pVtab->bCon
32d20 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20  straint ){.     
32d30 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45   if( pOp->p5==OE
32d40 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
32d50 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
32d60 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  K;.      }else{.
32d70 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72          p->error
32d80 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e  Action = ((pOp->
32d90 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20  p5==OE_Replace) 
32da0 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70  ? OE_Abort : pOp
32db0 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ->p5);.      }. 
32dc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
32dd0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
32de0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
32df0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
32e00 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32e10 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
32e20 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
32e30 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
32e40 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e  Opcode: Pagecoun
32e50 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
32e60 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75  .** Write the cu
32e70 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20  rrent number of 
32e80 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73  pages in databas
32e90 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63  e P1 to memory c
32ea0 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ell P2..*/.case 
32eb0 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20  OP_Pagecount: { 
32ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
32ed0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
32ee0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
32ef0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
32f00 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  age(db->aDb[pOp-
32f10 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65  >p1].pBt);.  bre
32f20 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
32f30 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
32f40 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
32f50 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78  S./* Opcode: Max
32f60 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a  Pgcnt P1 P2 P3 *
32f70 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20   *.**.** Try to 
32f80 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  set the maximum 
32f90 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64  page count for d
32fa0 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68  atabase P1 to th
32fb0 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a  e value in P3..*
32fc0 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65  * Do not let the
32fd0 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
32fe0 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74  unt fall below t
32ff0 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20  he current page 
33000 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20  count and.** do 
33010 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d  not change the m
33020 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
33030 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
33040 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ..**.** Store th
33050 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
33060 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63  ount after the c
33070 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65  hange in registe
33080 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
33090 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20  _MaxPgcnt: {    
330a0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
330b0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
330c0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77  unsigned int new
330d0 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  Max;.  Btree *pB
330e0 74 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  t;..  pBt = db->
330f0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
33100 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a  ;.  newMax = 0;.
33110 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
33120 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71  .    newMax = sq
33130 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
33140 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28  ge(pBt);.    if(
33150 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67   newMax < (unsig
33160 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65  ned)pOp->p3 ) ne
33170 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64  wMax = (unsigned
33180 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20  )pOp->p3;.  }.  
33190 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
331a0 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43  te3BtreeMaxPageC
331b0 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78  ount(pBt, newMax
331c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
331d0 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
331e0 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34  : Init * P2 * P4
331f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
33200 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a   Start at P2.**.
33210 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74  ** Programs cont
33220 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ain a single ins
33230 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70  tance of this op
33240 63 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79  code as the very
33250 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65   first.** opcode
33260 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69  ..**.** If traci
33270 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62  ng is enabled (b
33280 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72  y the sqlite3_tr
33290 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65  ace()) interface
332a0 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54  , then.** the UT
332b0 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  F-8 string conta
332c0 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d  ined in P4 is em
332d0 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61  itted on the tra
332e0 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20  ce callback..** 
332f0 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e  Or if P4 is blan
33300 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e  k, use the strin
33310 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  g returned by sq
33320 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a  lite3_sql()..**.
33330 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20  ** If P2 is not 
33340 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  zero, jump to in
33350 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
33360 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b  .case OP_Init: {
33370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
33380 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72  p */.  char *zTr
33390 61 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  ace;.  char *z;.
333a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29  .  if( pOp->p2 )
333b0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
333c0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e  p2 - 1;.  }.#ifn
333d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
333e0 54 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e  TRACE.  if( db->
333f0 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d  xTrace.   && !p-
33400 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26  >doingRerun.   &
33410 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
33420 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
33430 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
33440 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73  0.  ){.    z = s
33450 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64  qlite3VdbeExpand
33460 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a  Sql(p, zTrace);.
33470 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
33480 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29  b->pTraceArg, z)
33490 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
334a0 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a  ree(db, z);.  }.
334b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
334c0 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20  E_FCNTL_TRACE.  
334d0 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
334e0 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
334f0 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66  : p->zSql);.  if
33500 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ( zTrace ){.    
33510 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69  int i;.    for(i
33520 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
33530 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44  ++){.      if( D
33540 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
33550 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20  eeMask, i)==0 ) 
33560 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
33570 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
33580 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62  trol(db, db->aDb
33590 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54  [i].zName, SQLIT
335a0 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a  E_FCNTL_TRACE, z
335b0 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20  Trace);.    }.  
335c0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
335d0 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
335e0 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  CE */.#ifdef SQL
335f0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
33600 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
33610 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
33620 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
33630 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
33640 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
33650 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
33660 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
33670 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
33680 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
33690 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
336a0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
336b0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
336c0 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62 72  IT_TRACE */.  br
336d0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
336e0 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a  de: Noop * * * *
336f0 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68   *.**.** Do noth
33700 69 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72  ing.  This instr
33710 75 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20  uction is often 
33720 75 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70  useful as a jump
33730 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e  .** destination.
33740 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61  .*/./*.** The ma
33750 67 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f  gic Explain opco
33760 64 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65  de are only inse
33770 72 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69  rted when explai
33780 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69  n==2 (which.** i
33790 73 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68  s to say when th
337a0 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
337b0 50 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75  PLAN syntax is u
337c0 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70  sed.).** This op
337d0 63 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66  code records inf
337e0 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68  ormation from th
337f0 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74  e optimizer.  It
33800 20 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73   is the.** the s
33810 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20  ame as a no-op. 
33820 20 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76   This opcodesnev
33830 65 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20  er appears in a 
33840 72 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e  real VM program.
33850 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20  .*/.default: {  
33860 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20          /* This 
33870 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f  is really OP_Noo
33880 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e  p and OP_Explain
33890 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
338a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
338b0 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  op || pOp->opcod
338c0 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b  e==OP_Explain );
338d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a  .  break;.}../**
338e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54  ***********.** T
33930 68 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20  he cases of the 
33940 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
33950 20 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65   above this line
33960 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69   should all be i
33970 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20  ndented.** by 6 
33980 73 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65  spaces.  But the
33990 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61   left-most 6 spa
339a0 63 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ces have been re
339b0 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65  moved to improve
339c0 20 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c   the.** readabil
339d0 69 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20  ity.  From this 
339e0 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74  point on down, t
339f0 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  he normal indent
33a00 61 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a  ation rules are.
33a10 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a  ** restored..***
33a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20  **********/.    
33a70 7d 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  }..#ifdef VDBE_P
33a80 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20  ROFILE.    {.   
33a90 20 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d     u64 endTime =
33aa0 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29   sqlite3Hwtime()
33ab0 3b 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64 54  ;.      if( endT
33ac0 69 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 70 2d  ime>start ) pOp-
33ad0 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69  >cycles += endTi
33ae0 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20  me - start;.    
33af0 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20    pOp->cnt++;.  
33b00 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
33b10 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
33b20 20 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69   code adds nothi
33b30 6e 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  ng to the actual
33b40 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20   functionality. 
33b50 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f     ** of the pro
33b60 67 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c  gram.  It is onl
33b70 79 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69  y here for testi
33b80 6e 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  ng and debugging
33b90 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20  ..    ** On the 
33ba0 6f 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64  other hand, it d
33bb0 6f 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63  oes burn CPU cyc
33bc0 6c 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74  les every time t
33bd0 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68  hrough.    ** th
33be0 65 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70  e evaluator loop
33bf0 2e 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61  .  So we can lea
33c00 76 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e  ve it out when N
33c10 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
33c20 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66  ..    */.#ifndef
33c30 20 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65   NDEBUG.    asse
33c40 72 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63  rt( pc>=-1 && pc
33c50 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64  <p->nOp );..#ifd
33c60 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
33c70 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
33c80 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
33c90 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66  race ){.      if
33ca0 28 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66  ( rc!=0 ) printf
33cb0 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a  ("rc=%d\n",rc);.
33cc0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f        if( pOp->o
33cd0 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f  pflags & (OPFLG_
33ce0 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c  OUT2_PRERELEASE|
33cf0 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20  OPFLG_OUT2) ){. 
33d00 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54         registerT
33d10 72 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61  race(pOp->p2, &a
33d20 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
33d30 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
33d40 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20   pOp->opflags & 
33d50 4f 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20  OPFLG_OUT3 ){.  
33d60 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
33d70 61 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ace(pOp->p3, &aM
33d80 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
33d90 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
33da0 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  if  /* SQLITE_DE
33db0 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f  BUG */.#endif  /
33dc0 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20  * NDEBUG */.  } 
33dd0 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74   /* The end of t
33de0 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20  he for(;;) loop 
33df0 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67  the loops throug
33e00 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20  h opcodes */..  
33e10 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74  /* If we reach t
33e20 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65  his point, it me
33e30 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69  ans that executi
33e40 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77  on is finished w
33e50 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f  ith.  ** an erro
33e60 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a  r of some kind..
33e70 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f    */.vdbe_error_
33e80 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20  halt:.  assert( 
33e90 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  rc );.  p->rc = 
33ea0 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  rc;.  testcase( 
33eb0 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
33ec0 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20  fig.xLog!=0 );. 
33ed0 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c   sqlite3_log(rc,
33ee0 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72   "statement abor
33ef0 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25  ts at %d: [%s] %
33f00 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  s", .           
33f10 20 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a          pc, p->z
33f20 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
33f30 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48  ;.  sqlite3VdbeH
33f40 61 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63  alt(p);.  if( rc
33f50 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  ==SQLITE_IOERR_N
33f60 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f  OMEM ) db->mallo
33f70 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72  cFailed = 1;.  r
33f80 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
33f90 3b 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68  ;.  if( resetSch
33fa0 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a  emaOnFault>0 ){.
33fb0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
33fc0 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65  OneSchema(db, re
33fd0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
33fe0 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54  -1);.  }..  /* T
33ff0 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
34000 77 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20  way out of this 
34010 70 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68  procedure.  We h
34020 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65  ave to.  ** rele
34030 61 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20  ase the mutexes 
34040 6f 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77  on btrees that w
34050 65 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20  ere acquired at 
34060 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f  the.  ** top. */
34070 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20  .vdbe_return:.  
34080 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
34090 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73  lastRowid;.  tes
340a0 74 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30  tcase( nVmStep>0
340b0 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65   );.  p->aCounte
340c0 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
340d0 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20  TUS_VM_STEP] += 
340e0 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20  (int)nVmStep;.  
340f0 73 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65  sqlite3VdbeLeave
34100 28 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  (p);.  return rc
34110 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
34120 68 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67  here if a string
34130 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20   or blob larger 
34140 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f  than SQLITE_MAX_
34150 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65  LENGTH.  ** is e
34160 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f  ncountered..  */
34170 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69  .too_big:.  sqli
34180 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
34190 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73  >zErrMsg, db, "s
341a0 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
341b0 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20  o big");.  rc = 
341c0 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20  SQLITE_TOOBIG;. 
341d0 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
341e0 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
341f0 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d  p to here if a m
34200 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20  alloc() fails.. 
34210 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62   */.no_mem:.  db
34220 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
34230 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74   1;.  sqlite3Set
34240 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
34250 73 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20  sg, db, "out of 
34260 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d  memory");.  rc =
34270 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
34280 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
34290 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
342a0 70 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e  p to here for an
342b0 79 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20  y other kind of 
342c0 66 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68  fatal error.  Th
342d0 65 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a  e "rc" variable.
342e0 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64    ** should hold
342f0 20 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65   the error numbe
34300 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  r..  */.abort_du
34310 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73  e_to_error:.  as
34320 73 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67  sert( p->zErrMsg
34330 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ==0 );.  if( db-
34340 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20  >mallocFailed ) 
34350 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
34360 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  M;.  if( rc!=SQL
34370 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20  ITE_IOERR_NOMEM 
34380 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
34390 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
343a0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
343b0 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
343c0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  );.  }.  goto vd
343d0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a  be_error_halt;..
343e0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
343f0 65 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  e if the sqlite3
34400 5f 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49  _interrupt() API
34410 20 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72   sets the interr
34420 75 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20  upt.  ** flag.. 
34430 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f   */.abort_due_to
34440 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73  _interrupt:.  as
34450 73 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49  sert( db->u1.isI
34460 6e 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20  nterrupted );.  
34470 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
34480 52 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d  RRUPT;.  p->rc =
34490 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65   rc;.  sqlite3Se
344a0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
344b0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
344c0 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
344d0 29 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  );.  goto vdbe_e
344e0 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a           rror_halt;.}.