/ Hex Artifact Content
Login

Artifact 74507905e92fec055e23895cb6b8dc322b9aacfc:


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 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
40e0: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
40f0: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
4100: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4110: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4120: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
4130: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
4140: 2e 0a 2a 2f 20 0a 73 74 61 74 69 63 20 4d 65 6d  ..*/ .static Mem
4150: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
4160: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
4170: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
4180: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
4190: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
41a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
41b0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
41c0: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
41d0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
41e0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
41f0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
4200: 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
4210: 61 6d 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c  amic(pOut) ) sql
4220: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
4230: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74  ll(pOut);.  pOut
4240: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
4250: 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74  t;.  return pOut
4260: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  ;.}.../*.** Exec
4270: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4280: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4290: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
42a0: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
42b0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
42c0: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
42d0: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
42e0: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
42f0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
4300: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
4310: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
4320: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4330: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
4340: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
4350: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4360: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4370: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4380: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4390: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
43a0: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
43b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
43c0: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
43d0: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
43e0: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
43f0: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
4400: 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a  TE_OK;        /*
4410: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
4420: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
4430: 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20  b = p->db;      
4440: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
4450: 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63   */.  u8 resetSc
4460: 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b  hemaOnFault = 0;
4470: 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61   /* Reset schema
4480: 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
4490: 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20  if positive */. 
44a0: 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45   u8 encoding = E
44b0: 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54  NC(db);     /* T
44c0: 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f  he database enco
44d0: 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43  ding */.  int iC
44e0: 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20  ompare = 0;     
44f0: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
4500: 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72  f last OP_Compar
4510: 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20  e operation */. 
4520: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
4530: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
4540: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
4550: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
4560: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4570: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4580: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4590: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
45a0: 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20  t = 0;/* Invoke 
45b0: 78 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e  xProgress() when
45c0: 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73   nVmStep reaches
45d0: 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a   this */.#endif.
45e0: 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d    Mem *aMem = p-
45f0: 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20  >aMem;       /* 
4600: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20  Copy of p->aMem 
4610: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d  */.  Mem *pIn1 =
4620: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4630: 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65  /* 1st input ope
4640: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4650: 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In2 = 0;        
4660: 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75       /* 2nd inpu
4670: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4680: 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20  em *pIn3 = 0;   
4690: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64            /* 3rd
46a0: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
46b0: 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20  /.  Mem *pOut = 
46c0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
46d0: 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64  * Output operand
46e0: 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d   */.  int *aPerm
46f0: 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ute = 0;        
4700: 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20   /* Permutation 
4710: 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f  of columns for O
4720: 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69  P_Compare */.  i
4730: 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  64 lastRowid = d
4740: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f  b->lastRowid;  /
4750: 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66  * Saved value of
4760: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74   the last insert
4770: 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66   ROWID */.#ifdef
4780: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4790: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
47a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
47b0: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
47c0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
47d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
47e0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
47f0: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
4800: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
4810: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
4820: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
4830: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4840: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
4850: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
4860: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
4870: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
4880: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
4890: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
48a0: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
48b0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
48c0: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
48d0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
48e0: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
48f0: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4900: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4910: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4920: 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d 3d 53  E_OK || p->rc==S
4930: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
4940: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
4950: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
4960: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72  nly!=0 );.  p->r
4970: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
4980: 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65   p->iCurrentTime
4990: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
49a0: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
49b0: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
49c0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
49d0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
49e0: 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  0;.  if( db->u1.
49f0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
4a00: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
4a10: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73  o_interrupt;.  s
4a20: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4a30: 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66  eSql(p);.#ifndef
4a40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4a50: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4a60: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
4a70: 73 73 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ss ){.    assert
4a80: 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72  ( 0 < db->nProgr
4a90: 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50  essOps );.    nP
4aa0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 28  rogressLimit = (
4ab0: 75 6e 73 69 67 6e 65 64 29 70 2d 3e 61 43 6f 75  unsigned)p->aCou
4ac0: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ad0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4ae0: 0a 20 20 20 20 69 66 28 20 6e 50 72 6f 67 72 65  .    if( nProgre
4af0: 73 73 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a 20 20  ssLimit==0 ){.  
4b00: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
4b10: 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65  it = db->nProgre
4b20: 73 73 4f 70 73 3b 0a 20 20 20 20 7d 65 6c 73 65  ssOps;.    }else
4b30: 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  {.      nProgres
4b40: 73 4c 69 6d 69 74 20 25 3d 20 28 75 6e 73 69 67  sLimit %= (unsig
4b50: 6e 65 64 29 64 62 2d 3e 6e 50 72 6f 67 72 65 73  ned)db->nProgres
4b60: 73 4f 70 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sOps;.    }.  }.
4b70: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
4b80: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c  LITE_DEBUG.  sql
4b90: 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
4ba0: 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70  alloc();.  if( p
4bb0: 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70  ->pc==0.   && (p
4bc0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53  ->db->flags & (S
4bd0: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4be0: 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  g|SQLITE_VdbeEQP
4bf0: 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  |SQLITE_VdbeTrac
4c00: 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  e))!=0.  ){.    
4c10: 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f  int i;.    int o
4c20: 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c  nce = 1;.    sql
4c30: 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c  ite3VdbePrintSql
4c40: 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  (p);.    if( p->
4c50: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
4c60: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29  TE_VdbeListing )
4c70: 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22  {.      printf("
4c80: 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73  VDBE Program Lis
4c90: 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  ting:\n");.     
4ca0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4cb0: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4cc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
4cd0: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20  ntOp(stdout, i, 
4ce0: 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20  &aOp[i]);.      
4cf0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4d00: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4d10: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b  QLITE_VdbeEQP ){
4d20: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
4d30: 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a  i<p->nOp; i++){.
4d40: 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b          if( aOp[
4d50: 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  i].opcode==OP_Ex
4d60: 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20  plain ){.       
4d70: 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72     if( once ) pr
4d80: 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72 79  intf("VDBE Query
4d90: 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20   Plan:\n");.    
4da0: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73        printf("%s
4db0: 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a  \n", aOp[i].p4.z
4dc0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63  );.          onc
4dd0: 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
4de0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
4df0: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
4e00: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4e10: 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74 66  eTrace )  printf
4e20: 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22  ("VDBE Trace:\n"
4e30: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
4e40: 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
4e50: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28  );.#endif.  for(
4e60: 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b  pOp=&aOp[p->pc];
4e70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20   rc==SQLITE_OK; 
4e80: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  pOp++){.    asse
4e90: 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20  rt( pOp>=aOp && 
4ea0: 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d  pOp<&aOp[p->nOp]
4eb0: 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  );.    if( db->m
4ec0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
4ed0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65  to no_mem;.#ifde
4ee0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4ef0: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
4f00: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
4f10: 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b  if.    nVmStep++
4f20: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
4f30: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
4f40: 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20 70  STATUS.    if( p
4f50: 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e  ->anExec ) p->an
4f60: 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61  Exec[(int)(pOp-a
4f70: 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  Op)]++;.#endif..
4f80: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4f90: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4fa0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4fb0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4fc0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4fd0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
4fe0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4ff0: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
5000: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
5010: 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28  p(stdout, (int)(
5020: 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29  pOp - aOp), pOp)
5030: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5040: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
5050: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
5060: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
5070: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
5080: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
5090: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
50a0: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
50b0: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
50c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
50d0: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
50e0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
50f0: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
5100: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5110: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
5120: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5130: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
5140: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5150: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
5160: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5170: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53  #endif..    /* S
5180: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
5190: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
51a0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
51b0: 45 5f 44 45 42 55 47 0a 20 20 20 20 61 73 73 65  E_DEBUG.    asse
51c0: 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  rt( pOp->opflags
51d0: 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  ==sqlite3OpcodeP
51e0: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
51f0: 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20  ode] );.    if( 
5200: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5210: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
5220: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5230: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
5240: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5250: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
5260: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5270: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5280: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5290: 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1]) );.      ass
52a0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
52b0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
52c0: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ts(&aMem[pOp->p1
52d0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
52e0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
52f0: 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p1, &aMem[pOp->p
5300: 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  1]);.    }.    i
5310: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5320: 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30   & OPFLG_IN2)!=0
5330: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5340: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5350: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5360: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p2<=(p->nMem-p
5370: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5380: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
5390: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
53a0: 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p2]) );.      
53b0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
53c0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
53d0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
53e0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p2]) );.      R
53f0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5400: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
5410: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p2]);.    }.  
5420: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5430: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  ags & OPFLG_IN3)
5440: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
5450: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
5460: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5470: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5480: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
5490: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
54a0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
54b0: 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
54c0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
54d0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
54e0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
54f0: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5500: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5510: 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
5520: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d  pOp->p3]);.    }
5530: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5540: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
5550: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
5560: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5570: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5580: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5590: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
55a0: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
55b0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
55c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
55d0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
55e0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
55f0: 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a  FLG_OUT3)!=0 ){.
5600: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5610: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
5620: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5630: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
5640: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5650: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
5660: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
5670: 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  3]);.    }.#endi
5680: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
5690: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
56a0: 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46  efined(VDBE_PROF
56b0: 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70  ILE).    pOrigOp
56c0: 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20   = pOp;.#endif. 
56d0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56e0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56f0: 2a 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 0a 2a 2a 20  ************.** 
5740: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5750: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5760: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5770: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5780: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5790: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
57a0: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
57b0: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
57c0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57d0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57e0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57f0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
5800: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
5810: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5820: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5830: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5840: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5850: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5860: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5870: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5880: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5890: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
58a0: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
58b0: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
58c0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58d0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58e0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58f0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
5900: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
5910: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5920: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5930: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5940: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5950: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5960: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5970: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5980: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5990: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
59a0: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
59b0: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
59c0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59d0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59e0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59f0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
5a00: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
5a10: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5a20: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a30: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a40: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a50: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a60: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a70: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a80: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a90: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5aa0: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5ab0: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5ac0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5ad0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ae0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5af0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5b00: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5b10: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5b20: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b30: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b40: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b50: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b60: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b70: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b80: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b90: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5ba0: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5bb0: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5bc0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5bd0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5be0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bf0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5c00: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5c10: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5c20: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c   in2, in3, out2,
5c30: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
5c40: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
5c50: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
5c60: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
5c70: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
5c80: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
5c90: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
5ca0: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
5cb0: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
5cc0: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
5cd0: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
5ce0: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
5cf0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
5d00: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
5d10: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
5d20: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
5d30: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
5d40: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
5d50: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
5d60: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
5d70: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
5d80: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
5d90: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
5da0: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
5db0: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
5dc0: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
5dd0: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
5de0: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 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 2f 0a 0a  *************/..
5e40: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
5e50: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
5e60: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
5e70: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
5e80: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
5e90: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
5ea0: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
5eb0: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
5ec0: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
5ed0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
5ee0: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a   the program..**
5ef0: 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d  .** The P1 param
5f00: 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75  eter is not actu
5f10: 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69  ally used by thi
5f20: 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76  s opcode.  Howev
5f30: 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d  er, it.** is som
5f40: 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20  etimes set to 1 
5f50: 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20  instead of 0 as 
5f60: 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f  a hint to the co
5f70: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c  mmand-line shell
5f80: 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f  .** that this Go
5f90: 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d  to is the bottom
5fa0: 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74   of a loop and t
5fb0: 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72  hat the lines fr
5fc0: 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f  om P2 down.** to
5fd0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e   the current lin
5fe0: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5ff0: 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e  nted for EXPLAIN
6000: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
6010: 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20   OP_Goto: {     
6020: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
6030: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  */.jump_to_p2_an
6040: 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
6050: 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26  rrupt:.  pOp = &
6060: 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
6070: 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20  ;..  /* Opcodes 
6080: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
6090: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
60a0: 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20   loop (OP_Next, 
60b0: 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50  OP_Prev,.  ** OP
60c0: 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65  _VNext, OP_RowSe
60d0: 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72  tNext, or OP_Sor
60e0: 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d  terNext) all jum
60f0: 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a  p here upon.  **
6100: 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68   completion.  Ch
6110: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71  eck to see if sq
6120: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
6130: 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
6140: 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65  d.  ** or if the
6150: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6160: 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69  ck needs to be i
6170: 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20  nvoked. .  **.  
6180: 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65  ** This code use
6190: 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22  s unstructured "
61a0: 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73  goto" statements
61b0: 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f   and does not lo
61c0: 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42  ok clean..  ** B
61d0: 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64  ut that is not d
61e0: 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64  ue to sloppy cod
61f0: 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20  ing habits. The 
6200: 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20  code is written 
6210: 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f  this.  ** way fo
6220: 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74  r performance, t
6230: 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74  o avoid having t
6240: 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72  o run the interr
6250: 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73  upt and progress
6260: 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20  .  ** checks on 
6270: 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54  every opcode.  T
6280: 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65  his helps sqlite
6290: 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20  3_step() to run 
62a0: 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20  about 1.5%.  ** 
62b0: 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67  faster according
62c0: 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d   to "valgrind --
62d0: 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22  tool=cachegrind"
62e0: 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e   */.check_for_in
62f0: 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64  terrupt:.  if( d
6300: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
6310: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
6320: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
6330: 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
6340: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
6350: 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61  CALLBACK.  /* Ca
6360: 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  ll the progress 
6370: 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69  callback if it i
6380: 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64  s configured and
6390: 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75   the required nu
63a0: 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42  mber.  ** of VDB
63b0: 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20  E ops have been 
63c0: 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72  executed (either
63d0: 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f   since this invo
63e0: 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73  cation of.  ** s
63f0: 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29  qlite3VdbeExec()
6400: 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74   or since last t
6410: 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73  ime the progress
6420: 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61   callback was ca
6430: 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74  lled)..  ** If t
6440: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6450: 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e  back returns non
6460: 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20  -zero, exit the 
6470: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
6480: 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75  with.  ** a retu
6490: 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41  rn code SQLITE_A
64a0: 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  BORT..  */.  if(
64b0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
64c0: 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50  0 && nVmStep>=nP
64d0: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a  rogressLimit ){.
64e0: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
64f0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20  nProgressOps!=0 
6500: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
6510: 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20  Limit = nVmStep 
6520: 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  + db->nProgressO
6530: 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62  ps - (nVmStep%db
6540: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b  ->nProgressOps);
6550: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
6560: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
6570: 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20  ressArg) ){.    
6580: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
6590: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67  TERRUPT;.      g
65a0: 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
65b0: 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  alt;.    }.  }.#
65c0: 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b  endif.  .  break
65d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
65e0: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
65f0: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
6600: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
6610: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6620: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6630: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
6640: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
6650: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
6660: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6680: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
6690: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
66a0: 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  r) );.  pIn1 = &
66b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
66c0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
66d0: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
66e0: 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f   );.  memAboutTo
66f0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
6700: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6710: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31   MEM_Int;.  pIn1
6720: 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f  ->u.i = (int)(pO
6730: 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54  p-aOp);.  REGIST
6740: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
6750: 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d  , pIn1);..  /* M
6760: 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69  ost jump operati
6770: 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f  ons do a goto to
6780: 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72   this spot in or
6790: 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20  der to update.  
67a0: 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74  ** the pOp point
67b0: 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  er. */.jump_to_p
67c0: 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  2:.  pOp = &aOp[
67d0: 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
67e0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
67f0: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
6800: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
6810: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
6820: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
6830: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6840: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66  register P1.  Af
6850: 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c  ter.** the jump,
6860: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
6870: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
6880: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
6890: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
68a0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
68b0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
68c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
68d0: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
68e0: 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70   );.  pOp = &aOp
68f0: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70  [pIn1->u.i];.  p
6900: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6910: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
6920: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6930: 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  e: InitCoroutine
6940: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
6950: 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69 73  .** Set up regis
6960: 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  ter P1 so that i
6970: 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20  t will Yield to 
6980: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a  the coroutine.**
6990: 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64 72   located at addr
69a0: 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ess P3..**.** If
69b0: 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20   P2!=0 then the 
69c0: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
69d0: 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61  entation immedia
69e0: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20  tely follows.** 
69f0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f  this opcode.  So
6a00: 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63   jump over the c
6a10: 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65  oroutine impleme
6a20: 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64  ntation to.** ad
6a30: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  dress P2..**.** 
6a40: 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72  See also: EndCor
6a50: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
6a60: 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a  P_InitCoroutine:
6a70: 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a   {     /* jump *
6a80: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6a90: 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70  >p1>0 &&  pOp->p
6aa0: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
6ab0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6ac0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6ad0: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6ae0: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6af0: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6b00: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6b10: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6b20: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6b30: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6b40: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6b50: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6b60: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6b70: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6b80: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6b90: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
6ba0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6bb0: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
6bc0: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
6bd0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
6be0: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
6bf0: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6c00: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
6c10: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
6c20: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
6c30: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
6c40: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
6c50: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6c60: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
6c70: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6c80: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6c90: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
6ca0: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
6cb0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
6cc0: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
6cd0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6ce0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6cf0: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6d00: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
6d10: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
6d20: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
6d30: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
6d40: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
6d50: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
6d60: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
6d70: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
6d80: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
6d90: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
6da0: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
6db0: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
6dc0: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
6dd0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
6de0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
6df0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6e00: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
6e10: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
6e20: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
6e30: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
6e40: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
6e50: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
6e60: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
6e70: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
6e80: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
6e90: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
6ea0: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
6eb0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
6ec0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
6ed0: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
6ee0: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
6ef0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
6f00: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
6f10: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
6f20: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
6f30: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
6f40: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
6f50: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
6f60: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
6f70: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
6f80: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
6f90: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
6fa0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6fb0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6fc0: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
6fd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
6fe0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
6ff0: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7000: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7010: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7020: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7030: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
7040: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
7050: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
7060: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
7070: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
7080: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
7090: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
70a0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
70b0: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
70c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
70d0: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
70e0: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
70f0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7100: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
7110: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
7120: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
7130: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
7140: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
7150: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
7160: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
7170: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
7180: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
7190: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
71a0: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
71b0: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
71c0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
71d0: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
71e0: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
71f0: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
7200: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
7210: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
7220: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
7230: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
7240: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
7250: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
7260: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
7270: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7280: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
7290: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
72a0: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
72b0: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
72c0: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
72d0: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
72e0: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
72f0: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7300: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7310: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7320: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7330: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
7340: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
7350: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7360: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
7370: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
7380: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
7390: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
73a0: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
73b0: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
73c0: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
73d0: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
73e0: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
73f0: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7400: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7410: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7420: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7430: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
7440: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
7450: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
7460: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
7470: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
7480: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
7490: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
74a0: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
74b0: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
74c0: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
74d0: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
74e0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
74f0: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7500: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7510: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7520: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7530: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
7540: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
7550: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
7560: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
7570: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
7580: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
7590: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
75a0: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
75b0: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
75c0: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
75d0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
75e0: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
75f0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7600: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
7610: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
7620: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7630: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
7640: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
7650: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
7660: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
7670: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
7680: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
7690: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
76a0: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
76b0: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
76c0: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
76d0: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
76e0: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
76f0: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
7700: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7710: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
7720: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
7730: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
7740: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
7750: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
7760: 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Type;.  const ch
7770: 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56  ar *zLogFmt;.  V
7780: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
7790: 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20  ;.  int pcx;..  
77a0: 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  pcx = (int)(pOp 
77b0: 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f  - aOp);.  if( pO
77c0: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
77d0: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
77e0: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
77f0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
7800: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
7810: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
7820: 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20  . */.    pFrame 
7830: 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20  = p->pFrame;.   
7840: 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
7850: 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20  ame->pParent;.  
7860: 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20    p->nFrame--;. 
7870: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7880: 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
7890: 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63  nChange);.    pc
78a0: 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  x = sqlite3VdbeF
78b0: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
78c0: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
78d0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
78e0: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
78f0: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
7900: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
7910: 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68  uction pcx is th
7920: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
7930: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
7940: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
7950: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
7960: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
7970: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
7980: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
7990: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
79a0: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
79b0: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
79c0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
79d0: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
79e0: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
79f0: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
7a00: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
7a10: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
7a20: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
7a30: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
7a40: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
7a50: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
7a60: 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e  x = p->aOp[pcx].
7a70: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
7a80: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
7a90: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
7aa0: 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  ;.    pOp = &aOp
7ab0: 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b  [pcx];.    break
7ac0: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20  ;.  }.  p->rc = 
7ad0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72  pOp->p1;.  p->er
7ae0: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29  rorAction = (u8)
7af0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63  pOp->p2;.  p->pc
7b00: 20 3d 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d   = pcx;.  if( p-
7b10: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
7b20: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
7b30: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
7b40: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
7b50: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
7b60: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
7b70: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
7bb0: 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   };.      assert
7bc0: 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20  ( pOp->p5>=1 && 
7bd0: 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20  pOp->p5<=4 );.  
7be0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7bf0: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
7c00: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7c10: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
7c20: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7c30: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
7c40: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7c50: 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70  =4 );.      zTyp
7c60: 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e  e = azType[pOp->
7c70: 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  p5-1];.    }else
7c80: 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  {.      zType = 
7c90: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  0;.    }.    ass
7ca0: 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c  ert( zType!=0 ||
7cb0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7cc0: 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22  .    zLogFmt = "
7cd0: 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b  abort at %d in [
7ce0: 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66  %s]: %s";.    if
7cf0: 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e  ( zType && pOp->
7d00: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71  p4.z ){.      sq
7d10: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
7d20: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
7d30: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
7d40: 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a 20 20 20  ailed: %s", .   
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d60: 20 20 20 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e      zType, pOp->
7d70: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
7d80: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
7d90: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
7da0: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
7db0: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
7dc0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7dd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
7de0: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
7df0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
7e00: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
7e10: 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20  iled", zType);. 
7e20: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
7e30: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c  _log(pOp->p1, zL
7e40: 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a  ogFmt, pcx, p->z
7e50: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
7e60: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
7e70: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
7e80: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
7e90: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
7ea0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
7eb0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
7ec0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
7ed0: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
7ee0: 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
7ef0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
7f00: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
7f10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f20: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
7f30: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
7f40: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
7f50: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7f60: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
7f70: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
7f80: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
7f90: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
7fa0: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
7fb0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
7fc0: 7d 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  }.  pOp = &aOp[p
7fd0: 63 78 5d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  cx];.  goto vdbe
7fe0: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
7ff0: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
8000: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
8010: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31  nopsis: r[P2]=P1
8020: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
8030: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
8040: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
8050: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8060: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
8070: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
8080: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
8090: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
80a0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
80b0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
80c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
80d0: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
80e0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
80f0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
8100: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
8110: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
8120: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
8130: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
8140: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8150: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8160: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
8170: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8180: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8190: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
81a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
81b0: 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20  p4.pI64!=0 );.  
81c0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70  pOut->u.i = *pOp
81d0: 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
81e0: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
81f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
8200: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
8210: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
8220: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
8230: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
8240: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
8250: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
8260: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
8270: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
8280: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
8290: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
82a0: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
82b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
82c0: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
82d0: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
82e0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
82f0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
8300: 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  ags = MEM_Real;.
8310: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
8320: 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34  e3IsNaN(*pOp->p4
8330: 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75  .pReal) );.  pOu
8340: 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.r = *pOp->p
8350: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
8360: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
8370: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
8380: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8390: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
83a0: 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  4'.**.** P4 poin
83b0: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
83c0: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
83d0: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
83e0: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
83f0: 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e  .** into a Strin
8400: 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20  g opcode before 
8410: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
8420: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
8430: 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68  e.  During.** th
8440: 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  is transformatio
8450: 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  n, the length of
8460: 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f   string P4 is co
8470: 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65  mputed and store
8480: 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70  d.** as the P1 p
8490: 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73  arameter..*/.cas
84a0: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
84b0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
84c0: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
84d0: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
84e0: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
84f0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8500: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8510: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
8520: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
8530: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
8540: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
8550: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
8560: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
8570: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
8580: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
8590: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
85a0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
85b0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
85c0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
85d0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
85e0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
85f0: 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74  _TOOBIG ) goto t
8600: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
8610: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
8620: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
8630: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
8640: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
8650: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
8660: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
8670: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
8680: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
8690: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
86a0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
86b0: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
86c0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
86d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
86e0: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
86f0: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
8700: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
8710: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
8720: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
8730: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
8740: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
8750: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
8760: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
8770: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
8780: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
8790: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
87a0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
87b0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
87c0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
87d0: 62 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61  big;.  }.  /* Fa
87e0: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
87f0: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
8800: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
8810: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
8820: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
8830: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8840: 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29  2]='P4' (len=P1)
8850: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
8860: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
8870: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
8880: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
8890: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
88a0: 49 66 20 50 35 21 3d 30 20 61 6e 64 20 74 68 65  If P5!=0 and the
88b0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
88c0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
88d0: 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
88e0: 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79  en.** the dataty
88f0: 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74  pe of the regist
8900: 65 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74  er P2 is convert
8910: 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65  ed to BLOB.  The
8920: 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74   content is.** t
8930: 68 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65  he same sequence
8940: 20 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73   of bytes, it is
8950: 20 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65   merely interpre
8960: 74 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  ted as a BLOB in
8970: 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74  stead.** of a st
8980: 72 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68  ring, as if it h
8990: 61 64 20 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f  ad been CAST..*/
89a0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
89b0: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
89c0: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
89d0: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
89e0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
89f0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8a00: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
8a10: 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
8a20: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
8a30: 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e   pOut->z = pOp->
8a40: 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  p4.z;.  pOut->n 
8a50: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
8a60: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
8a70: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
8a80: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
8a90: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
8aa0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
8ab0: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73  ->p3>0 );.    as
8ac0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8ad0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8ae0: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
8af0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
8b00: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
8b10: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
8b20: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
8b30: 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d  In3->u.i ) pOut-
8b40: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
8b50: 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  b|MEM_Static|MEM
8b60: 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  _Term;.  }.  bre
8b70: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8b80: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
8b90: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8ba0: 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c    r[P2..P3]=NULL
8bb0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
8bc0: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
8bd0: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
8be0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
8bf0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
8c00: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
8c10: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
8c20: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
8c30: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
8c40: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
8c50: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
8c60: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
8c70: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
8c80: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
8c90: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
8ca0: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
8cb0: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
8cc0: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
8cd0: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
8ce0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
8cf0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
8d00: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
8d10: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
8d20: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
8d30: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
8d40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
8d50: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
8d60: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
8d70: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
8d80: 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  lag;.  pOut = ou
8d90: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8da0: 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f  pOp);.  cnt = pO
8db0: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
8dc0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
8dd0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
8de0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
8df0: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
8e00: 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28  ag = pOp->p1 ? (
8e10: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65  MEM_Null|MEM_Cle
8e20: 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c  ared) : MEM_Null
8e30: 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30  ;.  while( cnt>0
8e40: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a   ){.    pOut++;.
8e50: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
8e60: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
8e70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
8e80: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
8e90: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
8ea0: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
8eb0: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
8ec0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8ed0: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
8ee0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
8ef0: 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  s:  r[P1]=NULL.*
8f00: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
8f10: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
8f20: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
8f30: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
8f40: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
8f50: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
8f60: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
8f70: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
8f80: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
8f90: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
8fa0: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
8fb0: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
8fc0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
8fd0: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
8fe0: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
8ff0: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
9000: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
9010: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
9020: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
9030: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
9040: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
9050: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
9060: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
9070: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9080: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
9090: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d  ->flags = (pOut-
90a0: 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29  >flags|MEM_Null)
90b0: 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  &~MEM_Undefined;
90c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
90d0: 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20  Opcode: Blob P1 
90e0: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
90f0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20  opsis: r[P2]=P4 
9100: 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50  (len=P1).**.** P
9110: 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c  4 points to a bl
9120: 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79  ob of data P1 by
9130: 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65  tes long.  Store
9140: 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e   this.** blob in
9150: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
9160: 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b  .case OP_Blob: {
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
9190: 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20  ert( pOp->p1 <= 
91a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
91b0: 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  H );.  pOut = ou
91c0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
91d0: 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  pOp);.  sqlite3V
91e0: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
91f0: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f  t, pOp->p4.z, pO
9200: 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20  p->p1, 0, 0);.  
9210: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
9220: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
9230: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
9240: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
9250: 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62  * Opcode: Variab
9260: 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  le P1 P2 * P4 *.
9270: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9280: 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c  2]=parameter(P1,
9290: 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  P4).**.** Transf
92a0: 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  er the values of
92b0: 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72   bound parameter
92c0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
92d0: 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  r P2.**.** If th
92e0: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  e parameter is n
92f0: 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e  amed, then its n
9300: 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50  ame appears in P
9310: 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  4..** The P4 val
9320: 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71  ue is used by sq
9330: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
9340: 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a  eter_name()..*/.
9350: 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65  case OP_Variable
9360: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
9370: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20  * out2 */.  Mem 
9380: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
9390: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
93a0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
93b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
93c0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
93d0: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
93e0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
93f0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
9400: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
9410: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9420: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9430: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9440: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9450: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
9460: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70  too_big;.  }.  p
9470: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9480: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9490: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
94a0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
94b0: 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pVar, MEM_Static
94c0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
94d0: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
94e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
94f0: 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50  pcode: Move P1 P
9500: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9510: 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d  psis:  r[P2@P3]=
9520: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
9530: 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65  ove the P3 value
9540: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
9550: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
9560: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
9570: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
9580: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9590: 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P3-1 are.** left
95a0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
95b0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
95c0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
95d0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
95e0: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
95f0: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20  3-1 to overlap. 
9600: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a   It is an error.
9610: 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20  ** for P3 to be 
9620: 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a  less than 1..*/.
9630: 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a  case OP_Move: {.
9640: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
9650: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9660: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
9670: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
9680: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
9690: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
96a0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
96b0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
96c0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
96d0: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
96e0: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
96f0: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
9700: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
9710: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
9720: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
9730: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
9740: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
9750: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
9760: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
9770: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
9780: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
9790: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
97a0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
97b0: 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d  ert( pIn1<=&aMem
97c0: 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
97d0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
97e0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
97f0: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
9800: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9810: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9820: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
9830: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
9840: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9850: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
9860: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
9870: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
9880: 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70  copyFrom<&aMem[p
9890: 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20  1+pOp->p3] ){.  
98a0: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
98b0: 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20  From += pOp->p2 
98c0: 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  - p1;.    }.#end
98d0: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
98e0: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
98f0: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
9900: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68     pOut++;.  }wh
9910: 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72  ile( --n );.  br
9920: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9930: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33  e: Copy P1 P2 P3
9940: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9950: 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50  : r[P2@P3+1]=r[P
9960: 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  1@P3+1].**.** Ma
9970: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
9980: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
9990: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
99a0: 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a  P2..P2+P3..**.**
99b0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
99c0: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
99d0: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
99e0: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
99f0: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
9a00: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
9a10: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
9a20: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
9a30: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
9a40: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
9a50: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31   pOp->p3;.  pIn1
9a60: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9a70: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9a80: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
9a90: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
9aa0: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29   );.  while( 1 )
9ab0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
9ac0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9ad0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
9ae0: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
9af0: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
9b00: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9b10: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
9b20: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
9b30: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
9b40: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
9b50: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
9b60: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
9b70: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
9b80: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
9b90: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
9ba0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9bb0: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
9bc0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9bd0: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
9be0: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
9bf0: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
9c00: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9c10: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
9c20: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
9c30: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
9c40: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9c50: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
9c60: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
9c70: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
9c80: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
9c90: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
9ca0: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
9cb0: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
9cc0: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
9cd0: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
9ce0: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
9cf0: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
9d00: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
9d10: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
9d20: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
9d30: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
9d40: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
9d50: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
9d60: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
9d70: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
9d80: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
9d90: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
9da0: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
9db0: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
9dc0: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
9dd0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9de0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9df0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
9e00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9e10: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
9e20: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
9e30: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
9e40: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
9e50: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
9e60: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9e70: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
9e80: 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74  pyFrom==0 ) pOut
9e90: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70  ->pScopyFrom = p
9ea0: 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72  In1;.#endif.  br
9eb0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9ec0: 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20  e: ResultRow P1 
9ed0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
9ee0: 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b  psis:  output=r[
9ef0: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
9f00: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
9f10: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
9f20: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
9f30: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
9f40: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
9f50: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
9f60: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
9f70: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
9f80: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
9f90: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
9fa0: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
9fb0: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
9fc0: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
9fd0: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
9fe0: 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32  e r(P1)..r(P1+P2
9ff0: 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a  -1) values as.**
a000: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e   the result row.
a010: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
a020: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
a030: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
a040: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
a050: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
a060: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a070: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
a080: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
a090: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
a0a0: 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a  >nCursor)+1 );..
a0b0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a0c0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
a0d0: 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74  LBACK.  /* Run t
a0e0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e  he progress coun
a0f0: 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20  ter just before 
a100: 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a  returning..  */.
a110: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
a120: 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d  ess!=0.   && nVm
a130: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
a140: 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78  imit.   && db->x
a150: 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72  Progress(db->pPr
a160: 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20  ogressArg)!=0.  
a170: 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
a180: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
a190: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
a1a0: 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64  r_halt;.  }.#end
a1b0: 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  if..  /* If this
a1c0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76   statement has v
a1d0: 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74  iolated immediat
a1e0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
a1f0: 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20  nstraints, do.  
a200: 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68  ** not return th
a210: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
a220: 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64   modified. And d
a230: 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68  o not RELEASE th
a240: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a  e statement.  **
a250: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74   transaction. It
a260: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
a270: 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20  led back.  */.  
a280: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28  if( SQLITE_OK!=(
a290: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
a2a0: 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29  CheckFk(p, 0)) )
a2b0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
a2c0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
a2d0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20  ountRows );.    
a2e0: 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53  assert( p->usesS
a2f0: 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20  tmtJournal );.  
a300: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
a310: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
a320: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
a330: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
a340: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
a350: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
a360: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
a370: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
a380: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
a390: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
a3a0: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
a3b0: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
a3c0: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
a3d0: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
a3e0: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
a3f0: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
a400: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
a410: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
a420: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
a430: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
a440: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
a450: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
a460: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
a470: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
a480: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
a490: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
a4a0: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
a4b0: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
a4c0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
a4d0: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
a4e0: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
a4f0: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
a500: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
a510: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
a520: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
a530: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
a540: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
a550: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
a560: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
a570: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
a580: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
a590: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
a5a0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a5b0: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
a5c0: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
a5d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
a5e0: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
a5f0: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
a600: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
a610: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
a620: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
a630: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
a640: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
a650: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
a660: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a670: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
a680: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
a690: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
a6a0: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28  _RELEASE);.  if(
a6b0: 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
a6c0: 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65  E_OK) ){.    bre
a6d0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e  ak;.  }..  /* In
a6e0: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
a6f0: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
a700: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
a710: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
a720: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
a730: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
a740: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
a750: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
a760: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
a770: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
a780: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
a790: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
a7a0: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
a7b0: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20  lized as.  ** a 
a7c0: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
a7d0: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
a7e0: 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d  esultSet = &aMem
a7f0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
a800: 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b  (i=0; i<pOp->p2;
a810: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
a820: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70  t( memIsValid(&p
a830: 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44  Mem[i]) );.    D
a840: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
a850: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73  Mem[i]);.    ass
a860: 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c  ert( (pMem[i].fl
a870: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
a880: 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
a890: 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  || (pMem[i].flag
a8a0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
a8b0: 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
a8c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a8d0: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
a8e0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49  em[i]);.    REGI
a8f0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
a900: 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b  p1+i, &pMem[i]);
a910: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
a920: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
a930: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a  to no_mem;..  /*
a940: 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   Return SQLITE_R
a950: 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20  OW.  */.  p->pc 
a960: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
a970: 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  p) + 1;.  rc = S
a980: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
a990: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
a9a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
a9b0: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
a9c0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a9d0: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
a9e0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
a9f0: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
aa00: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
aa10: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
aa20: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
aa30: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
aa40: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
aa50: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
aa60: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
aa70: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
aa80: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
aa90: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
aaa0: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
aab0: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
aac0: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
aad0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
aae0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
aaf0: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
ab00: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
ab10: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
ab20: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
ab30: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
ab40: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
ab50: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
ab60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ab70: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
ab80: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
ab90: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
aba0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
abb0: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
abc0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
abd0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
abe0: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
abf0: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
ac00: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
ac10: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
ac20: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
ac30: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
ac40: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
ac50: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
ac60: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
ac70: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
ac80: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
ac90: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
aca0: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
acb0: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
acc0: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
acd0: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
ace0: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
acf0: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
ad00: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
ad10: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
ad20: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
ad30: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
ad40: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
ad50: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
ad60: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
ad70: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
ad80: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
ad90: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
ada0: 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21  tr);.  if( pOut!
adb0: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
adc0: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
add0: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
ade0: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
adf0: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
ae00: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
ae10: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
ae20: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
ae30: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
ae40: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
ae50: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
ae60: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
ae70: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
ae80: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
ae90: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
aea0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
aeb0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
aec0: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
aed0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
aee0: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
aef0: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
af00: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
af10: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
af20: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
af30: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
af40: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
af50: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
af60: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
af70: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
af80: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
af90: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
afa0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
afb0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
afc0: 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a  P1]*r[P2].**.**.
afd0: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
afe0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
aff0: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
b000: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b010: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b020: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b030: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b040: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b050: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b060: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b070: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
b080: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b090: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b0a0: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
b0b0: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
b0c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b0d0: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
b0e0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b0f0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b100: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b110: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b120: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b130: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b140: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b150: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
b160: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b170: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b180: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
b190: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
b1a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b1b0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
b1c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b1d0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b1e0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b1f0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
b200: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
b210: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
b220: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
b230: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b240: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
b250: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
b260: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b270: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b280: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
b290: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b2a0: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
b2b0: 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]%r[P1].**.** 
b2c0: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
b2d0: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
b2e0: 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20  ger register P2 
b2f0: 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a  is divided by .*
b300: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  * register P1 an
b310: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b320: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b330: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
b340: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b350: 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P1 is zero the r
b360: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b370: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
b380: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
b390: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b3a0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b3d0: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
b3e0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b3f0: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
b400: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b410: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
b420: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
b430: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b450: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
b460: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b470: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
b480: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
b490: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
b4a0: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
b4b0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b4c0: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
b4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b4e0: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
b4f0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
b500: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
b510: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
b520: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
b530: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20  erands */.  u16 
b540: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
b550: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
b560: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
b570: 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79  puts */.  u16 ty
b580: 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe1;      /* Num
b590: 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66  eric type of lef
b5a0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75  t operand */.  u
b5b0: 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f  16 type2;      /
b5c0: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
b5d0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b5e0: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20  */.  i64 iA;    
b5f0: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
b600: 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70  value of left op
b610: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69  erand */.  i64 i
b620: 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  B;         /* In
b630: 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72  teger value of r
b640: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
b650: 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20    double rA;    
b660: 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20    /* Real value 
b670: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
b680: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20  */.  double rB; 
b690: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
b6a0: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
b6b0: 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  and */..  pIn1 =
b6c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b6d0: 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72  .  type1 = numer
b6e0: 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20  icType(pIn1);.  
b6f0: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
b700: 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d  ->p2];.  type2 =
b710: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e   numericType(pIn
b720: 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2);.  pOut = &aM
b730: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
b740: 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  lags = pIn1->fla
b750: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
b760: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26  ;.  if( (flags &
b770: 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20   MEM_Null)!=0 ) 
b780: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b790: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b7a0: 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20 74    if( (type1 & t
b7b0: 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21  ype2 & MEM_Int)!
b7c0: 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70  =0 ){.    iA = p
b7d0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42  In1->u.i;.    iB
b7e0: 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
b7f0: 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20    bIntint = 1;. 
b800: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
b810: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
b820: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b830: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 64     if( sqlite3Ad
b840: 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  dInt64(&iB,iA) )
b850: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
b860: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b870: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
b880: 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e  if( sqlite3SubIn
b890: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
b8a0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
b8b0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b8c0: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28  P_Multiply:  if(
b8d0: 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
b8e0: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
b8f0: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
b900: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
b910: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
b920: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
b930: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
b940: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
b950: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
b960: 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f  && iB==SMALLEST_
b970: 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f  INT64 ) goto fp_
b980: 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42  math;.        iB
b990: 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   /= iA;.        
b9a0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
b9b0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
b9c0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b9d0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b9e0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b9f0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
ba00: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
ba10: 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69  .        iB %= i
ba20: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
ba30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
ba40: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
ba50: 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  iB;.    MemSetTy
ba60: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
ba70: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _Int);.  }else{.
ba80: 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b      bIntint = 0;
ba90: 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41  .fp_math:.    rA
baa0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
bab0: 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  alValue(pIn1);. 
bac0: 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56     rB = sqlite3V
bad0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
bae0: 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  2);.    switch( 
baf0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
bb00: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
bb10: 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20  :         rB += 
bb20: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
bb30: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
bb40: 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d  ubtract:    rB -
bb50: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
bb60: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
bb70: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42  _Multiply:    rB
bb80: 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   *= rA;       br
bb90: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bba0: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
bbb0: 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29       /* (double)
bbc0: 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c  0 In case of SQL
bbd0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
bbe0: 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20  G_POINT... */.  
bbf0: 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64        if( rA==(d
bc00: 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61  ouble)0 ) goto a
bc10: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
bc20: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
bc30: 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20    rB /= rA;.    
bc40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bc50: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
bc60: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d  : {.        iA =
bc70: 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20   (i64)rA;.      
bc80: 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a    iB = (i64)rB;.
bc90: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bca0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
bcb0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
bcc0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
bcd0: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
bce0: 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64  .        rB = (d
bcf0: 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b  ouble)(iB % iA);
bd00: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bd10: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69        }.    }.#i
bd20: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
bd30: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
bd40: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
bd50: 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  rB;.    MemSetTy
bd60: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
bd70: 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20  _Int);.#else.   
bd80: 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61   if( sqlite3IsNa
bd90: 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67  N(rB) ){.      g
bda0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
bdb0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
bdc0: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
bdd0: 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  .r = rB;.    Mem
bde0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
bdf0: 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20  , MEM_Real);.   
be00: 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79 70   if( ((type1|typ
be10: 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  e2)&MEM_Real)==0
be20: 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a   && !bIntint ){.
be30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
be40: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
be50: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65  (pOut);.    }.#e
be60: 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
be70: 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65  ;..arithmetic_re
be80: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20  sult_is_null:.  
be90: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
bea0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62  tNull(pOut);.  b
beb0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
bec0: 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a  de: CollSeq P1 *
bed0: 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69   * P4.**.** P4 i
bee0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
bef0: 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e   CollSeq struct.
bf00: 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c   If the next cal
bf10: 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63  l to a user func
bf20: 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65  tion.** or aggre
bf30: 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74  gate calls sqlit
bf40: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
bf50: 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69  (), this collati
bf60: 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c  on sequence will
bf70: 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e  .** be returned.
bf80: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
bf90: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69   the built-in mi
bfa0: 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e  n(), max() and n
bfb0: 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74  ullif().** funct
bfc0: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ions..**.** If P
bfd0: 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  1 is not zero, t
bfe0: 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69  hen it is a regi
bff0: 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73  ster that a subs
c000: 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a  equent min() or.
c010: 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61  ** max() aggrega
c020: 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31  te will set to 1
c030: 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   if the current 
c040: 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d  row is not the m
c050: 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78  inimum or.** max
c060: 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65  imum.  The P1 re
c070: 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61  gister is initia
c080: 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68  lized to 0 by th
c090: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
c0a0: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  **.** The interf
c0b0: 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20  ace used by the 
c0c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
c0d0: 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69  f the aforementi
c0e0: 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  oned functions.*
c0f0: 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  * to retrieve th
c100: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
c110: 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73  ence set by this
c120: 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61   opcode is not a
c130: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c  vailable.** publ
c140: 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c  icly.  Only buil
c150: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68  t-in functions h
c160: 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ave access to th
c170: 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  is feature..*/.c
c180: 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20  ase OP_CollSeq: 
c190: 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
c1a0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c  >p4type==P4_COLL
c1b0: 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  SEQ );.  if( pOp
c1c0: 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
c1d0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
c1e0: 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  64(&aMem[pOp->p1
c1f0: 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ], 0);.  }.  bre
c200: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c210: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
c220: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
c230: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e  opsis: r[P3]=fun
c240: 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  c(r[P2@P5]).**.*
c250: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
c260: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
c270: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
c280: 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75 72  unction structur
c290: 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  e that.** define
c2a0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
c2b0: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
c2c0: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
c2d0: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
c2e0: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
c2f0: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c300: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
c310: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
c320: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
c330: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
c340: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c350: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
c360: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
c370: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
c380: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c390: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
c3a0: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
c3b0: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
c3c0: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
c3d0: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
c3e0: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
c3f0: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
c400: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
c410: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
c420: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
c430: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
c440: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
c450: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
c460: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
c470: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
c480: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
c490: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
c4a0: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
c4b0: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
c4c0: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
c4d0: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
c4e0: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
c4f0: 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20 41  o: AggStep and A
c500: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
c510: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20  OP_Function: {. 
c520: 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
c530: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  Arg;.  sqlite3_c
c540: 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71  ontext ctx;.  sq
c550: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
c560: 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  Val;.  int n;.. 
c570: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
c580: 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67  apVal = p->apArg
c590: 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56 61  ;.  assert( apVa
c5a0: 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 61  l || n==0 );.  a
c5b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
c5c0: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
c5d0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
c5e0: 29 20 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74 20  ) );.  ctx.pOut 
c5f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
c600: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
c610: 61 6e 67 65 28 70 2c 20 63 74 78 2e 70 4f 75 74  ange(p, ctx.pOut
c620: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  );..  assert( n=
c630: 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
c640: 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28   && pOp->p2+n<=(
c650: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
c660: 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  or)+1) );.  asse
c670: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
c680: 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
c690: 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
c6a0: 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Arg = &aMem[pOp-
c6b0: 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p2];.  for(i=0;
c6c0: 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b   i<n; i++, pArg+
c6d0: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
c6e0: 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67 29  memIsValid(pArg)
c6f0: 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d   );.    apVal[i]
c700: 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65 65   = pArg;.    Dee
c710: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72 67  phemeralize(pArg
c720: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
c730: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
c740: 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61   pArg);.  }..  a
c750: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
c760: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
c770: 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20  ;.  ctx.pFunc = 
c780: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
c790: 20 63 74 78 2e 69 4f 70 20 3d 20 28 69 6e 74 29   ctx.iOp = (int)
c7a0: 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 63  (pOp - aOp);.  c
c7b0: 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20  tx.pVdbe = p;.  
c7c0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 63  MemSetTypeFlag(c
c7d0: 74 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  tx.pOut, MEM_Nul
c7e0: 6c 29 3b 0a 20 20 63 74 78 2e 66 45 72 72 6f 72  l);.  ctx.fError
c7f0: 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d  OrAux = 0;.  db-
c800: 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
c810: 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e  tRowid;.  (*ctx.
c820: 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63  pFunc->xFunc)(&c
c830: 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f  tx, n, apVal); /
c840: 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
c850: 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f  3230 */.  lastRo
c860: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
c870: 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65  wid;  /* Remembe
c880: 72 20 72 6f 77 69 64 20 63 68 61 6e 67 65 73 20  r rowid changes 
c890: 6d 61 64 65 20 62 79 20 78 46 75 6e 63 20 2a 2f  made by xFunc */
c8a0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
c8b0: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
c8c0: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
c8d0: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
c8e0: 20 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72    if( ctx.fError
c8f0: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
c900: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
c910: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
c920: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
c930: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
c940: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
c950: 28 63 74 78 2e 70 4f 75 74 29 29 3b 0a 20 20 20  (ctx.pOut));.   
c960: 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
c970: 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ror;.    }.    s
c980: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
c990: 41 75 78 44 61 74 61 28 70 2c 20 28 69 6e 74 29  AuxData(p, (int)
c9a0: 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70  (pOp - aOp), pOp
c9b0: 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ->p1);.  }..  /*
c9c0: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
c9d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c9e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
c9f0: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
ca00: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
ca10: 28 63 74 78 2e 70 4f 75 74 2c 20 65 6e 63 6f 64  (ctx.pOut, encod
ca20: 69 6e 67 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ing);.  if( sqli
ca30: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
ca40: 28 63 74 78 2e 70 4f 75 74 29 20 29 7b 0a 20 20  (ctx.pOut) ){.  
ca50: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
ca60: 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f    }..  REGISTER_
ca70: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 63  TRACE(pOp->p3, c
ca80: 74 78 2e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  tx.pOut);.  UPDA
ca90: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
caa0: 63 74 78 2e 70 4f 75 74 29 3b 0a 20 20 62 72 65  ctx.pOut);.  bre
cab0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
cac0: 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50  : BitAnd P1 P2 P
cad0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cae0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  s:  r[P3]=r[P1]&
caf0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
cb00: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
cb10: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
cb20: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
cb30: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
cb40: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
cb50: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
cb60: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
cb70: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
cb80: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
cb90: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
cba0: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
cbb0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
cbc0: 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a  3]=r[P1]|r[P2].*
cbd0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
cbe0: 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65  t-wise OR of the
cbf0: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
cc00: 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
cc10: 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  d.** store the r
cc20: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
cc30: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
cc40: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
cc50: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
cc60: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
cc70: 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31  de: ShiftLeft P1
cc80: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
cc90: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
cca0: 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]<<r[P1].**.*
ccb0: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
ccc0: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
ccd0: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
cce0: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
ccf0: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
cd00: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
cd10: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
cd20: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
cd30: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
cd40: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
cd50: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
cd60: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
cd70: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
cd80: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
cd90: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
cda0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
cdb0: 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31  [P3]=r[P2]>>r[P1
cdc0: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
cdd0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
cde0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
cdf0: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
ce00: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
ce10: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
ce20: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
ce30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
ce40: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
ce50: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
ce60: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
ce70: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
ce80: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ce90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
cea0: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
ceb0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cec0: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
ced0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
cee0: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cf00: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
cf10: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cf20: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cf30: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
cf40: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cf50: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
cf60: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cf70: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
cf80: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
cf90: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
cfa0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cfb0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20   */.  i64 iA;.  
cfc0: 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42  u64 uA;.  i64 iB
cfd0: 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49  ;.  u8 op;..  pI
cfe0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cff0: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
d000: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
d010: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
d020: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
d030: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
d040: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
d050: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
d060: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
d070: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
d080: 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71  k;.  }.  iA = sq
d090: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
d0a0: 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20  e(pIn2);.  iB = 
d0b0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
d0c0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20  lue(pIn1);.  op 
d0d0: 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
d0e0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41   if( op==OP_BitA
d0f0: 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20  nd ){.    iA &= 
d100: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
d110: 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a  op==OP_BitOr ){.
d120: 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20      iA |= iB;.  
d130: 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20  }else if( iB!=0 
d140: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  ){.    assert( o
d150: 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74  p==OP_ShiftRight
d160: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
d170: 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  Left );..    /* 
d180: 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61  If shifting by a
d190: 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74   negative amount
d1a0: 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f  , shift in the o
d1b0: 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a  ther direction *
d1c0: 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29  /.    if( iB<0 )
d1d0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
d1e0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f  OP_ShiftRight==O
d1f0: 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b  P_ShiftLeft+1 );
d200: 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50  .      op = 2*OP
d210: 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d  _ShiftLeft + 1 -
d220: 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20   op;.      iB = 
d230: 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a  iB>(-64) ? -iB :
d240: 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   64;.    }..    
d250: 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20  if( iB>=64 ){.  
d260: 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20      iA = (iA>=0 
d270: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
d280: 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20  eft) ? 0 : -1;. 
d290: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
d2a0: 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c  memcpy(&uA, &iA,
d2b0: 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20   sizeof(uA));.  
d2c0: 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53      if( op==OP_S
d2d0: 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20  hiftLeft ){.    
d2e0: 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20      uA <<= iB;. 
d2f0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
d300: 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20      uA >>= iB;. 
d310: 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65         /* Sign-e
d320: 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74  xtend on a right
d330: 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61   shift of a nega
d340: 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  tive number */. 
d350: 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20         if( iA<0 
d360: 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29  ) uA |= ((((u64)
d370: 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0xffffffff)<<32)
d380: 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20  |0xffffffff) << 
d390: 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d  (64-iB);.      }
d3a0: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69  .      memcpy(&i
d3b0: 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69  A, &uA, sizeof(i
d3c0: 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  A));.    }.  }. 
d3d0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b   pOut->u.i = iA;
d3e0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
d3f0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
d400: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d410: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
d420: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
d430: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d  Synopsis:  r[P1]
d440: 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a  =r[P1]+P2.** .**
d450: 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e   Add the constan
d460: 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75  t P2 to the valu
d470: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d480: 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  ..** The result 
d490: 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74  is always an int
d4a0: 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66  eger..**.** To f
d4b0: 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65  orce any registe
d4c0: 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  r to be an integ
d4d0: 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a  er, just add 0..
d4e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d  */.case OP_AddIm
d4f0: 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  m: {            
d500: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
d510: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d520: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
d530: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
d540: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
d550: 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
d560: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d  ;.  pIn1->u.i +=
d570: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61   pOp->p2;.  brea
d580: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
d590: 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32   MustBeInt P1 P2
d5a0: 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f   * * *.** .** Fo
d5b0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d5c0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d5d0: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  be an integer.  
d5e0: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
d5f0: 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20  in P1 is not an 
d600: 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e  integer and cann
d610: 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
d620: 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a  into an integer.
d630: 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20  ** without data 
d640: 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20  loss, then jump 
d650: 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
d660: 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a  2, or if P2==0.*
d670: 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  * raise an SQLIT
d680: 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70  E_MISMATCH excep
d690: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
d6a0: 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20  _MustBeInt: {   
d6b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
d6c0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
d6d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d6e0: 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
d6f0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
d700: 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
d710: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
d720: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
d730: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
d740: 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
d750: 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ((pIn1->flags&ME
d760: 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20  M_Int)==0, 2);. 
d770: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
d780: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
d790: 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  0 ){.      if( p
d7a0: 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
d7b0: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
d7c0: 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20  _MISMATCH;.     
d7d0: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
d7e0: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
d7f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
d800: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
d810: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
d820: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
d830: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
d840: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
d850: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d860: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
d870: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
d880: 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a  ealAffinity P1 *
d890: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
d8a0: 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64  register P1 hold
d8b0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e  s an integer con
d8c0: 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61  vert it to a rea
d8d0: 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54  l value..**.** T
d8e0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
d8f0: 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69  ed when extracti
d900: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ng information f
d910: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61  rom a column tha
d920: 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66  t.** has REAL af
d930: 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f  finity.  Such co
d940: 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20  lumn values may 
d950: 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20  still be stored 
d960: 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20  as.** integers, 
d970: 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69  for space effici
d980: 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20  ency, but after 
d990: 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61  extraction we wa
d9a0: 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61  nt them.** to ha
d9b0: 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76  ve only a real v
d9c0: 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
d9d0: 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b  _RealAffinity: {
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9f0: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
da00: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
da10: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
da20: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
da30: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
da40: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
da50: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
da60: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
da70: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
da80: 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  CAST./* Opcode: 
da90: 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Cast P1 P2 * * *
daa0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66  .** Synopsis: af
dab0: 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a  finity(r[P1]).**
dac0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
dad0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
dae0: 50 31 20 74 6f 20 62 65 20 74 68 65 20 74 79 70  P1 to be the typ
daf0: 65 20 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e  e defined by P2.
db00: 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20  .** .** <ul>.** 
db10: 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22 3e 20  <li value="97"> 
db20: 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75  TEXT.** <li valu
db30: 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20  e="98"> BLOB.** 
db40: 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22 3e 20  <li value="99"> 
db50: 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76  NUMERIC.** <li v
db60: 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e 54 45  alue="100"> INTE
db70: 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  GER.** <li value
db80: 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20  ="101"> REAL.** 
db90: 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  </ul>.**.** A NU
dba0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
dbb0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
dbc0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
dbd0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
dbe0: 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20  se OP_Cast: {   
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc00: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
dc10: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49  t( pOp->p2>=SQLI
dc20: 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 26 26 20 70  TE_AFF_NONE && p
dc30: 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41  Op->p2<=SQLITE_A
dc40: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73  FF_REAL );.  tes
dc50: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
dc60: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
dc70: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
dc80: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
dc90: 46 46 5f 4e 4f 4e 45 20 29 3b 0a 20 20 74 65 73  FF_NONE );.  tes
dca0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
dcb0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
dcc0: 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  IC );.  testcase
dcd0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
dce0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b  E_AFF_INTEGER );
dcf0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
dd00: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
dd10: 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20  _REAL );.  pIn1 
dd20: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
dd30: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
dd40: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
dd50: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
dd60: 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
dd70: 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e  3VdbeMemCast(pIn
dd80: 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f  1, pOp->p2, enco
dd90: 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
dda0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
ddb0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  1);.  break;.}.#
ddc0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ddd0: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
dde0: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
ddf0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
de00: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
de10: 3c 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  <r[P3] goto P2.*
de20: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
de30: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
de40: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
de50: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
de60: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
de70: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
de80: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
de90: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
dea0: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
deb0: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
dec0: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
ded0: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
dee0: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
def0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
df00: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
df10: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
df20: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
df30: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
df40: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
df50: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
df60: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
df70: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
df80: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
df90: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
dfa0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
dfb0: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
dfc0: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
dfd0: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
dfe0: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
dff0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
e000: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
e010: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
e020: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
e030: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
e040: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
e050: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
e060: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
e070: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
e080: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
e090: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
e0a0: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
e0b0: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
e0c0: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
e0d0: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
e0e0: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
e0f0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
e100: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e110: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
e120: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
e130: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
e140: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
e150: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
e160: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
e170: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
e180: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
e190: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
e1a0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
e1b0: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
e1c0: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
e1d0: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
e1e0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
e1f0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
e200: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
e210: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
e220: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
e230: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
e240: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
e250: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
e260: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
e270: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
e280: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
e290: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
e2a0: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
e2b0: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
e2c0: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
e2d0: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
e2e0: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
e2f0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
e300: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
e310: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
e320: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
e330: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
e340: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
e350: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
e360: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ..**.** If the S
e370: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69  QLITE_STOREP2 bi
e380: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  t of P5 is set, 
e390: 74 68 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70  then do not jump
e3a0: 2e 20 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73  .  Instead,.** s
e3b0: 74 6f 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72  tore a boolean r
e3c0: 65 73 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c  esult (either 0,
e3d0: 20 6f 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20   or 1, or NULL) 
e3e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
e3f0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
e400: 49 54 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69  ITE_NULLEQ bit i
e410: 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65  s set in P5, the
e420: 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  n NULL values ar
e430: 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20  e considered.** 
e440: 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f  equal to one ano
e450: 74 68 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74  ther, provided t
e460: 68 61 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20  hat they do not 
e470: 68 61 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43  have their MEM_C
e480: 6c 65 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65  leared.** bit se
e490: 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
e4a0: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
e4b0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e4c0: 69 66 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20  if r[P1]!=r[P3] 
e4d0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
e4e0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
e4f0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
e500: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
e510: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
e520: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
e530: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
e540: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
e550: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
e560: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Lt opcode for.*
e570: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
e580: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
e590: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
e5a0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
e5b0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
e5c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
e5d0: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
e5e0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
e5f0: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
e600: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
e610: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
e620: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
e630: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e640: 66 61 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65  false.  If eithe
e650: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e660: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e670: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66  t is true..** If
e680: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
e690: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
e6a0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
e6b0: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
e6c0: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
e6d0: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
e6e0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
e6f0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e700: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
e710: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
e720: 66 20 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67  f r[P1]==r[P3] g
e730: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
e740: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e750: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e760: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
e770: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
e780: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
e790: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
e7a0: 20 61 6e 64 20 50 33 20 61 72 65 20 65 71 75 61   and P3 are equa
e7b0: 6c 2e 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74  l..** See the Lt
e7c0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
e7d0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
e7e0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  on..**.** If SQL
e7f0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
e800: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
e810: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
e820: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
e830: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
e840: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
e850: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
e860: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
e870: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
e880: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
e890: 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20  arison is true. 
e8a0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
e8b0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
e8c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
e8d0: 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  lse..** If neith
e8e0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e8f0: 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  LL the result is
e900: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
e910: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
e920: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
e930: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
e940: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f  ed from P5..*/./
e950: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
e960: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
e970: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
e980: 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]<=r[P3] goto P2
e990: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e9a0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e9b0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
e9c0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e9d0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e9e0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
e9f0: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
ea00: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
ea10: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
ea20: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
ea30: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
ea40: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
ea50: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
ea60: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
ea70: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
ea80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
ea90: 72 5b 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]>r[P3] goto
eaa0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
eab0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
eac0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
ead0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
eae0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eaf0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
eb00: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
eb10: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
eb20: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
eb30: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
eb40: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
eb50: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
eb60: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
eb70: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
eb80: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
eb90: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
eba0: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
ebb0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
ebc0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
ebd0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
ebe0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
ebf0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
ec00: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
ec10: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
ec20: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
ec30: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
ec40: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
ec50: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
ec60: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ec70: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
ec80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
eca0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
ecb0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ecc0: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ece0: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
ecf0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ed00: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
ed10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ed20: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
ed30: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
ed40: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
ed50: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ed60: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
ed70: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
ed80: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
ed90: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
eda0: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
edb0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
edc0: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
edd0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ede0: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
edf0: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
ee00: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
ee10: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
ee20: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
ee30: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
ee40: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
ee50: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
ee60: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
ee70: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
ee80: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
ee90: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
eea0: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
eeb0: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
eec0: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
eed0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
eee0: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
eef0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
ef00: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ef10: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
ef20: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
ef30: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
ef40: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
ef50: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
ef60: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20  ;.  if( (flags1 
ef70: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75  | flags3)&MEM_Nu
ef80: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
ef90: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
efa0: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
efb0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
efc0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
efd0: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
efe0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
eff0: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
f000: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
f010: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
f020: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
f030: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
f040: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
f050: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f060: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
f070: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
f080: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
f090: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
f0a0: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
f0b0: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
f0c0: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
f0d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
f0e0: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61  lags1 & MEM_Clea
f0f0: 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  red)==0 );.     
f100: 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
f110: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
f120: 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20  FNULL)==0 );.   
f130: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d     if( (flags1&M
f140: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20  EM_Null)!=0.    
f150: 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45     && (flags3&ME
f160: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f170: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f180: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f190: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f1a0: 73 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 0;  /* Resul
f1b0: 74 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ts are equal */.
f1c0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
f1d0: 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f       res = 1;  /
f1e0: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f  * Results are no
f1f0: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
f200: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
f210: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
f220: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
f230: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
f240: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
f250: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
f260: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
f270: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
f280: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
f290: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
f2a0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
f2b0: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
f2c0: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
f2d0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
f2e0: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
f2f0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
f300: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 4d  ->p2];.        M
f310: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
f320: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
f330: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
f340: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
f350: 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
f360: 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
f370: 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
f380: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
f390: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
f3a0: 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
f3b0: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
f3c0: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d  to_p2;.        }
f3d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
f3e0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
f3f0: 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
f400: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f410: 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
f420: 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
f430: 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
f440: 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
f450: 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
f460: 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
f470: 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
f480: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
f490: 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
f4a0: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
f4b0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
f4c0: 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
f4d0: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30  cAffinity(pIn1,0
f4e0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
f4f0: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
f500: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
f510: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f520: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f530: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
f540: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
f550: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
f560: 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
f570: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
f580: 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  T ){.      if( (
f590: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
f5a0: 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70 49  M_Str)==0 && (pI
f5b0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n1->flags & (MEM
f5c0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
f5d0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
f5e0: 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
f5f0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
f600: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
f610: 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
f620: 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
f630: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f640: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
f650: 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  1, encoding, 1);
f660: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
f670: 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44  e( (flags1&MEM_D
f680: 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c  yn) != (pIn1->fl
f690: 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
f6a0: 20 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d          flags1 =
f6b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f6c0: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
f6d0: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54   (flags1 & MEM_T
f6e0: 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
f6f0: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  }.      if( (pIn
f700: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  3->flags & MEM_S
f710: 74 72 29 3d 3d 30 20 26 26 20 28 70 49 6e 33 2d  tr)==0 && (pIn3-
f720: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
f730: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
f740: 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
f750: 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
f760: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
f770: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f780: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
f790: 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
f7a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
f7b0: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20  Stringify(pIn3, 
f7c0: 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
f7d0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f7e0: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29  (flags3&MEM_Dyn)
f7f0: 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73   != (pIn3->flags
f800: 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
f810: 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70       flags3 = (p
f820: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In3->flags & ~ME
f830: 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
f840: 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65  lags3 & MEM_Type
f850: 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mask);.      }. 
f860: 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
f870: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
f880: 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d  _COLLSEQ || pOp-
f890: 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a  >p4.pColl==0 );.
f8a0: 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c      if( pIn1->fl
f8b0: 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
f8c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
f8d0: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
f8e0: 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c  (pIn1);.      fl
f8f0: 61 67 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72  ags1 &= ~MEM_Zer
f900: 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  o;.    }.    if(
f910: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
f920: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
f930: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
f940: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
f950: 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20 26 3d  .      flags3 &=
f960: 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20   ~MEM_Zero;.    
f970: 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  }.    if( db->ma
f980: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
f990: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 72 65  o no_mem;.    re
f9a0: 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
f9b0: 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
f9c0: 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
f9d0: 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20  ;.  }.  switch( 
f9e0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
f9f0: 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20     case OP_Eq:  
fa00: 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20    res = res==0; 
fa10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
fa20: 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
fa30: 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20  s = res!=0;     
fa40: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
fa50: 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Lt:    res = 
fa60: 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61  res<0;      brea
fa70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
fa80: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  e:    res = res<
fa90: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
faa0: 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
fab0: 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20    res = res>0;  
fac0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
fad0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
fae0: 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  s = res>=0;     
faf0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
fb00: 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65   Undo any change
fb10: 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41  s made by applyA
fb20: 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65  ffinity() to the
fb30: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
fb40: 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  . */.  assert( (
fb50: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
fb60: 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73  M_Dyn) == (flags
fb70: 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  1 & MEM_Dyn) );.
fb80: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
fb90: 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74  flags1;.  assert
fba0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
fbb0: 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
fbc0: 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags3 & MEM_Dyn) 
fbd0: 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
fbe0: 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66   = flags3;..  if
fbf0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
fc00: 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
fc10: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
fc20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d  Op->p2];.    mem
fc30: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
fc40: 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
fc50: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
fc60: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
fc70: 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a  Out->u.i = res;.
fc80: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
fc90: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
fca0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
fcb0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
fcc0: 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35  res!=0, (pOp->p5
fcd0: 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
fce0: 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20  )?2:3);.    if( 
fcf0: 72 65 73 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  res ){.      got
fd00: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
fd10: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
fd20: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
fd30: 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
fd40: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
fd50: 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
fd60: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
fd70: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
fd80: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
fd90: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
fda0: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
fdb0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
fdc0: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
fdd0: 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70  the next OP_Comp
fde0: 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20  are that has.** 
fdf0: 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
fe00: 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35  TE bit set in P5
fe10: 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20  . Typically the 
fe20: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73  OP_Permutation s
fe30: 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20  hould .** occur 
fe40: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
fe50: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
fe60: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
fe70: 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
fe80: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
fe90: 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
fea0: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
feb0: 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
fec0: 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
fed0: 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
fee0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
fef0: 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
ff00: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
ff10: 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
ff20: 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
ff30: 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
ff40: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
ff50: 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
ff60: 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
ff70: 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
ff80: 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
ff90: 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
ffa0: 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
ffb0: 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
ffc0: 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
ffd0: 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
ffe0: 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
fff0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
10000 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
10010 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
10020 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
10030 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
10040 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10050 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10060 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
10070 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
10080 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
10090 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
100a0 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
100b0 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
100c0 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
100d0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
100e0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
100f0 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
10100 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10110 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
10120 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
10130 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
10140 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
10150 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
10160 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
10170 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
10180 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
10190 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
101a0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
101b0 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
101c0 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
101d0 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
101e0 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
101f0 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
10200 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
10210 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
10220 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
10230 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
10240 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
10250 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
10260 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
10270 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
10280 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
10290 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
102a0 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
102b0 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
102c0 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
102d0 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
102e0 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
102f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
10300 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
10310 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28   order */..  if(
10320 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
10330 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29  AG_PERMUTE)==0 )
10340 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
10350 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
10360 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
10370 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
10380 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
10390 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
103a0 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f  !=0 );.  p1 = pO
103b0 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
103c0 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54  p->p2;.#if SQLIT
103d0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50  E_DEBUG.  if( aP
103e0 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e  ermute ){.    in
103f0 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20  t k, mx = 0;.   
10400 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b   for(k=0; k<n; k
10410 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65  ++) if( aPermute
10420 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50  [k]>mx ) mx = aP
10430 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61  ermute[k];.    a
10440 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
10450 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  1+mx<=(p->nMem-p
10460 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10470 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
10480 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p2+mx<=(p->n
10490 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
104a0 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
104b0 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
104c0 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p1+n<=(p->nMem
104d0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
104e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
104f0 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e  >0 && p2+n<=(p->
10500 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
10510 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  +1 );.  }.#endif
10520 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
10530 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   */.  for(i=0; i
10540 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64  <n; i++){.    id
10550 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
10560 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
10570 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
10580 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b  sValid(&aMem[p1+
10590 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73  idx]) );.    ass
105a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
105b0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29  &aMem[p2+idx]) )
105c0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
105d0 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d  RACE(p1+idx, &aM
105e0 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p1+idx]);.   
105f0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10600 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32  p2+idx, &aMem[p2
10610 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
10620 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
10630 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
10640 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
10650 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
10660 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
10670 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
10680 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
10690 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
106a0 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61  aMem[p1+idx], &a
106b0 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
106c0 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
106d0 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
106e0 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
106f0 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
10700 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
10710 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74   }.  }.  aPermut
10720 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
10730 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
10740 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
10750 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
10760 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
10770 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
10780 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
10790 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
107a0 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
107b0 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
107c0 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
107d0 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
107e0 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
107f0 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
10800 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
10810 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
10820 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
10830 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
10840 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
10850 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
10860 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10870 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (0,3); pOp = &aO
10880 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  p[pOp->p1 - 1];.
10890 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
108a0 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56  pare==0 ){.    V
108b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
108c0 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
108d0 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
108e0 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
108f0 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
10900 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
10910 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20  >p3 - 1];.  }.  
10920 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10930 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
10940 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
10950 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
10960 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  && r[P2]).**.** 
10970 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
10980 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
10990 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
109a0 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
109b0 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
109c0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
109d0 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
109e0 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
109f0 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
10a00 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
10a10 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
10a20 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
10a30 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
10a40 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
10a50 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
10a60 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
10a70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
10a80 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
10a90 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
10aa0 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  || r[P2]).**.** 
10ab0 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
10ac0 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
10ad0 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
10ae0 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
10af0 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
10b00 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
10b10 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
10b20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
10b30 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
10b40 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
10b50 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
10b60 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
10b70 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
10b80 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
10b90 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
10ba0 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
10bb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10bd0 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
10be0 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
10bf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10c10 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
10c20 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
10c30 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
10c40 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
10c50 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
10c60 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
10c70 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
10c80 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
10c90 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
10ca0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
10cb0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
10cc0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
10cd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
10ce0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10cf0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
10d00 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
10d10 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
10d20 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
10d30 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
10d40 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
10d50 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
10d60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
10d70 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
10d80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
10d90 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
10da0 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
10db0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
10dc0 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
10dd0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10de0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
10df0 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
10e00 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
10e10 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
10e20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
10e30 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
10e40 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
10e50 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
10e60 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
10e70 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
10e80 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
10e90 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
10ea0 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
10eb0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10ec0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
10ed0 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
10ee0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10ef0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
10f00 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
10f10 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
10f20 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
10f30 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
10f40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
10f50 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
10f60 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10f70 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a  : r[P2]= !r[P1].
10f80 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10f90 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
10fa0 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
10fb0 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
10fc0 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
10fd0 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
10fe0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
10ff0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11000 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
11010 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
11020 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
11030 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11040 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
11050 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11060 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
11070 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
11080 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11090 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
110a0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
110b0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
110c0 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
110d0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
110e0 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
110f0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
11100 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
11110 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56  >u.i = !sqlite3V
11120 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
11130 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11140 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
11150 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
11160 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11170 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
11180 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
11190 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
111a0 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
111b0 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
111c0 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
111d0 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
111e0 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
111f0 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
11200 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
11210 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
11220 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11230 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
11240 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11250 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
11260 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
11270 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11280 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
11290 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
112a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
112b0 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
112c0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
112d0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
112e0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
112f0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
11300 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69  Out->u.i = ~sqli
11310 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11320 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
11330 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11340 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
11350 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
11360 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e  he "once" flag n
11370 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20  umber P1. If it 
11380 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20  is set, jump to 
11390 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
113a0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73  .** Otherwise, s
113b0 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20  et the flag and 
113c0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
113d0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
113e0 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  tion..** In othe
113f0 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70  r words, this op
11400 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20  code causes all 
11410 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65  following opcode
11420 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a  s up through P2.
11430 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c  ** (but not incl
11440 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e  uding P2) to run
11450 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74   just once and t
11460 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20  o be skipped on 
11470 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69  subsequent.** ti
11480 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  mes through the 
11490 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  loop..**.** All 
114a0 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65  "once" flags are
114b0 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72   initially clear
114c0 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72  ed whenever a pr
114d0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
114e0 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73  .** first begins
114f0 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65   to run..*/.case
11500 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
11510 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
11520 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
11530 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
11540 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  g );.  VdbeBranc
11550 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46  hTaken(p->aOnceF
11560 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c  lag[pOp->p1]!=0,
11570 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f   2);.  if( p->aO
11580 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11590 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
115a0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
115b0 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  {.    p->aOnceFl
115c0 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b  ag[pOp->p1] = 1;
115d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
115e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
115f0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
11600 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
11610 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11620 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
11630 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
11640 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
11650 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
11660 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
11670 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
11680 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
11690 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
116a0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
116b0 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
116c0 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  o..*/./* Opcode:
116d0 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
116e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
116f0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
11700 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11710 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
11720 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
11730 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
11740 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
11750 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
11760 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
11770 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
11780 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
11790 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
117a0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
117b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
117e0 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
117f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
11800 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
11810 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  t c;.  pIn1 = &a
11820 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11830 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
11840 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
11850 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    c = pOp->p3;. 
11860 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53   }else{.#ifdef S
11870 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
11880 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20  ING_POINT.    c 
11890 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
118a0 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
118b0 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
118c0 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
118d0 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
118e0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
118f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
11900 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
11910 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
11920 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20  ken(c!=0, 2);.  
11930 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f 74  if( c ){.    got
11940 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11950 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11960 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
11970 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
11980 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
11990 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
119a0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
119b0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
119c0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
119d0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
119e0 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
119f0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11a00 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
11a10 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
11a20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11a30 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
11a40 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
11a50 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
11a60 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
11a70 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11a80 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
11a90 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
11aa0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11ab0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
11ac0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
11ad0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
11ae0 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
11af0 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
11b00 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
11b10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11b20 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
11b30 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
11b40 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
11b50 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
11b60 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
11b70 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
11b80 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11b90 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11ba0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11bb0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
11bc0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
11bd0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11be0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
11bf0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
11c00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11c10 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
11c20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
11c30 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
11c40 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
11c50 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
11c60 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
11c70 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
11c80 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
11c90 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
11ca0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
11cb0 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
11cc0 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
11cd0 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
11ce0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11cf0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
11d00 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
11d10 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
11d20 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
11d30 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
11d40 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
11d50 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
11d60 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
11d70 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
11d80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
11d90 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
11da0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
11db0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
11dc0 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
11dd0 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
11de0 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
11df0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
11e00 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
11e10 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
11e20 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
11e30 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
11e40 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
11e50 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
11e60 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
11e70 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
11e80 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
11e90 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
11ea0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
11eb0 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
11ec0 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
11ed0 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
11ee0 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
11ef0 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
11f00 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
11f10 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
11f20 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
11f30 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
11f40 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
11f50 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
11f60 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
11f70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
11f80 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
11f90 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
11fa0 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
11fb0 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68  on P5 when.** th
11fc0 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
11fd0 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
11fe0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
11ff0 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
12000 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
12010 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
12020 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
12030 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
12040 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
12050 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
12060 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
12070 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
12080 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
12090 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
120a0 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
120b0 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69  .  i64 payloadSi
120c0 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  ze64; /* Number 
120d0 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
120e0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
120f0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
12100 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
12110 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
12120 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
12130 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
12140 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75  cursor */.  BtCu
12150 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f  rsor *pCrsr;   /
12160 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73  * The BTree curs
12170 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  or */.  u32 *aOf
12180 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
12190 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
121a0 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
121b0 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
121c0 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
121d0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
121e0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
121f0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
12200 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
12210 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
12220 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
12230 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
12240 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
12250 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
12260 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
12270 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
12280 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
12290 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
122a0 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
122b0 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
122c0 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
122d0 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
122e0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
122f0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
12300 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
12310 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
12320 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
12330 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
12340 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
12350 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
12360 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
12370 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
12380 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
12390 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
123a0 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
123b0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
123c0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
123d0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
123e0 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76  ield */.  u32 av
123f0 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ail;         /* 
12400 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12410 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
12420 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20  a */.  u32 t;   
12430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74            /* A t
12440 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  ype code from th
12450 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
12460 2a 2f 0a 20 20 75 31 36 20 66 78 3b 20 20 20 20  */.  u16 fx;    
12470 20 20 20 20 20 20 20 20 2f 2a 20 70 44 65 73 74          /* pDest
12480 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65 20 2a 2f  ->flags value */
12490 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
124a0 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
124b0 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
124c0 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d 20 70  ter */..  p2 = p
124d0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
124e0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
124f0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
12500 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
12510 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
12520 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
12530 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
12540 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
12550 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
12560 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
12570 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
12580 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
12590 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
125a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  );.  assert( p2<
125b0 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20  pC->nField );.  
125c0 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f  aOffset = pC->aO
125d0 66 66 73 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  ffset;.#ifndef S
125e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
125f0 41 4c 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74  ALTABLE.  assert
12600 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  ( pC->pVtabCurso
12610 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f  r==0 ); /* OP_Co
12620 6c 75 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65  lumn never calle
12630 64 20 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62  d on virtual tab
12640 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70  le */.#endif.  p
12650 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
12660 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
12670 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73  rsr!=0 || pC->ps
12680 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29  eudoTableReg>0 )
12690 3b 20 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20  ; /* pCrsr NULL 
126a0 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
126b0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  */.  assert( pCr
126c0 73 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c  sr!=0 || pC->nul
126d0 6c 52 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20  lRow );         
126e0 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   /* pC->nullRow 
126f0 6f 6e 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20  on PseudoTables 
12700 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  */..  /* If the 
12710 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20  cursor cache is 
12720 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20  stale, bring it 
12730 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20  up-to-date */.  
12740 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
12750 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
12760 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
12770 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
12780 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e  rror;.  if( pC->
12790 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
127a0 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20 20  cacheCtr ){.    
127b0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
127c0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72  ){.      if( pCr
127d0 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  sr==0 ){.       
127e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
127f0 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
12800 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
12810 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
12820 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20  TableReg];.     
12830 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
12840 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
12850 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
12860 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
12870 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
12880 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12890 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61   = pC->szRow = a
128a0 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  vail = pReg->n;.
128b0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
128c0 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
128d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
128e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
128f0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
12900 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  t);.        goto
12910 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
12920 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
12930 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e{.      assert(
12940 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20   pCrsr );.      
12950 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  if( pC->isTable=
12960 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
12970 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
12980 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
12990 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
129a0 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
129b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
129c0 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79  Size(pCrsr, &pay
129d0 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20  loadSize64);.   
129e0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d       assert( rc=
129f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a  =SQLITE_OK ); /*
12a00 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
12a10 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
12a20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
12a30 20 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33        /* sqlite3
12a40 42 74 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74  BtreeParseCellPt
12a50 72 28 29 20 75 73 65 73 20 67 65 74 56 61 72 69  r() uses getVari
12a60 6e 74 33 32 28 29 20 74 6f 20 65 78 74 72 61 63  nt32() to extrac
12a70 74 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a  t the.        **
12a80 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73   payload size, s
12a90 6f 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  o it is impossib
12aa0 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69  le for payloadSi
12ab0 7a 65 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20  ze64 to be.     
12ac0 20 20 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61     ** larger tha
12ad0 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20  n 32 bits. */.  
12ae0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
12af0 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53  ayloadSize64 & S
12b00 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d  QLITE_MAX_U32)==
12b10 28 75 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u64)payloadSize
12b20 36 34 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  64 );.        pC
12b30 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
12b40 42 74 72 65 65 4b 65 79 46 65 74 63 68 28 70 43  BtreeKeyFetch(pC
12b50 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20  rsr, &avail);.  
12b60 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
12b70 64 53 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79  dSize = (u32)pay
12b80 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20  loadSize64;.    
12b90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
12ba0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
12bb0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
12bc0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
12bd0 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
12be0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
12bf0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
12c00 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65  &pC->payloadSize
12c10 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
12c20 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
12c30 20 29 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a   );   /* DataSiz
12c40 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
12c50 2a 2f 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  */.        pC->a
12c60 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
12c70 65 65 44 61 74 61 46 65 74 63 68 28 70 43 72 73  eeDataFetch(pCrs
12c80 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
12c90 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
12ca0 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29  ( avail<=65536 )
12cb0 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61  ;  /* Maximum pa
12cc0 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42  ge size is 64KiB
12cd0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
12ce0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d  ->payloadSize <=
12cf0 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20   (u32)avail ){. 
12d00 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77         pC->szRow
12d10 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   = pC->payloadSi
12d20 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ze;.      }else{
12d30 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  .        pC->szR
12d40 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20  ow = avail;.    
12d50 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 43    }.      if( pC
12d60 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20  ->payloadSize > 
12d70 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
12d80 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
12d90 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  GTH] ){.        
12da0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
12db0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
12dc0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
12dd0 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  = p->cacheCtr;. 
12de0 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
12df0 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28  t = getVarint32(
12e00 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74  pC->aRow, offset
12e10 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  );.    pC->nHdrP
12e20 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61  arsed = 0;.    a
12e30 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73  Offset[0] = offs
12e40 65 74 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65  et;..    /* Make
12e50 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20   sure a corrupt 
12e60 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
12e70 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65   given us an ove
12e80 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20  rsize header..  
12e90 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
12ea0 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
12eb0 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
12ec0 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a  ocation..    **.
12ed0 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
12ee0 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
12ef0 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
12f00 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
12f10 64 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20  d 5 byte.    ** 
12f20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
12f30 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
12f40 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
12f50 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
12f60 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  of.    ** them, 
12f70 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
12f80 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
12f90 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
12fa0 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a  lts from a.    *
12fb0 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f  * 3-byte type fo
12fc0 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61  r each of the ma
12fd0 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63  ximum of 32768 c
12fe0 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65  olumns plus thre
12ff0 65 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62  e.    ** extra b
13000 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
13010 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
13020 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
13030 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a  = 98307..    */.
13040 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
13050 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74   98307 || offset
13060 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
13070 7a 65 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  ze ){.      rc =
13080 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
13090 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
130a0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
130b0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
130c0 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b   avail<offset ){
130d0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
130e0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
130f0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
13100 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
13110 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
13120 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
13130 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
13140 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
13150 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
13160 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
13170 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
13180 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
13190 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
131a0 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
131b0 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
131c0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
131d0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
131e0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
131f0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
13200 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
13210 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
13220 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74 69   goto is an opti
13230 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63 61  mization.  It ca
13240 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e 64  n be omitted and
13250 0a 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68 69  .    ** everythi
13260 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77 6f  ng will still wo
13270 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c 75  rk.  But OP_Colu
13280 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c 79  mn is measurably
13290 20 66 61 73 74 65 72 0a 20 20 20 20 2a 2a 20 62   faster.    ** b
132a0 79 20 73 6b 69 70 70 69 6e 67 20 74 68 65 20 73  y skipping the s
132b0 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 64 69 74  ubsequent condit
132c0 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69 73 20  ional, which is 
132d0 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 20 20 20  always true..   
132e0 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
132f0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
13300 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a  p2 );         /*
13310 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69   Conditional ski
13320 70 70 65 64 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  pped */.    goto
13330 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
13340 68 65 61 64 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f  header;.  }..  /
13350 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c  * Make sure at l
13360 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70  east the first p
13370 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74  2+1 entries of t
13380 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62  he header have b
13390 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20  een.  ** parsed 
133a0 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d  and valid inform
133b0 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66  ation is in aOff
133c0 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54  set[] and pC->aT
133d0 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
133e0 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
133f0 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
13400 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
13410 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
13420 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
13430 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
13440 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
13450 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
13460 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
13470 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
13480 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f 70 5f   .    */.    op_
13490 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
134a0 65 72 3a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  er:.    if( pC->
134b0 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73  iHdrOffset<aOffs
134c0 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f  et[0] ){.      /
134d0 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74  * Make sure zDat
134e0 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75  a points to enou
134f0 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  gh of the record
13500 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
13510 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ader. */.      i
13520 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
13530 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74  {.        memset
13540 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
13550 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20  f(sMem));.      
13560 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
13570 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
13580 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  Crsr, 0, aOffset
13590 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 20 20  [0], .          
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 20 20 20 20 20 20 20 20 20 20 20 21 70 43 2d 3e             !pC->
135c0 69 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b  isTable, &sMem);
135d0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
135e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
135f0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13600 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
13610 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
13620 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
13630 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
13640 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
13650 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
13660 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
13670 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
13680 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
13690 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
136a0 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
136b0 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20 3d  ld. */.      i =
136c0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b   pC->nHdrParsed;
136d0 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20 3d 20  .      offset = 
136e0 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20  aOffset[i];.    
136f0 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b    zHdr = zData +
13700 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b   pC->iHdrOffset;
13710 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d  .      zEndHdr =
13720 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74   zData + aOffset
13730 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72  [0];.      asser
13740 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72  t( i<=p2 && zHdr
13750 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20  <zEndHdr );.    
13760 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
13770 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30 20 29  ( zHdr[0]<0x80 )
13780 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20 3d 20  {.          t = 
13790 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20 20 20  zHdr[0];.       
137a0 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
137b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
137c0 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69      zHdr += sqli
137d0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
137e0 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Hdr, &t);.      
137f0 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e    }.        pC->
13800 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20  aType[i] = t;.  
13810 20 20 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20        szField = 
13820 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
13830 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
13840 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
13850 7a 46 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20  zField;.        
13860 69 66 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65  if( offset<szFie
13870 6c 64 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69  ld ){  /* True i
13880 66 20 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f  f offset overflo
13890 77 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ws */.          
138a0 7a 48 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b  zHdr = &zEndHdr[
138b0 31 5d 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53  1];  /* Forces S
138c0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65  QLITE_CORRUPT re
138d0 74 75 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20  turn below */.  
138e0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
138f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
13900 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f   i++;.        aO
13910 66 66 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65  ffset[i] = offse
13920 74 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  t;.      }while(
13930 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
13940 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
13950 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
13960 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
13970 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
13980 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
13990 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
139a0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
139b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
139c0 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
139d0 20 20 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67         sMem.flag
139e0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
139f0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
13a00 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20  * The record is 
13a10 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f  corrupt if any o
13a20 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13a30 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20  are true:.      
13a40 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73  ** (1) the bytes
13a50 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65   of the header e
13a60 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64  xtend past the d
13a70 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73  eclared header s
13a80 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  ize.      **    
13a90 20 20 20 20 20 20 28 7a 48 64 72 3e 7a 45 6e 64        (zHdr>zEnd
13aa0 48 64 72 29 0a 20 20 20 20 20 20 2a 2a 20 28 32  Hdr).      ** (2
13ab0 29 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61  ) the entire hea
13ac0 64 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74  der was used but
13ad0 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61   not all data wa
13ae0 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20  s used.      ** 
13af0 20 20 20 20 20 20 20 20 20 28 7a 48 64 72 3d 3d           (zHdr==
13b00 7a 45 6e 64 48 64 72 20 26 26 20 6f 66 66 73 65  zEndHdr && offse
13b10 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  t!=pC->payloadSi
13b20 7a 65 29 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  ze).      ** (3)
13b30 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
13b40 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
13b50 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
13b60 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
13b70 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 6f 66   **          (of
13b80 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  fset > pC->paylo
13b90 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 2a 2f  adSize).      */
13ba0 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72  .      if( (zHdr
13bb0 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a 48  >=zEndHdr && (zH
13bc0 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66  dr>zEndHdr || of
13bd0 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61  fset!=pC->payloa
13be0 64 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c  dSize)).       |
13bf0 7c 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e  | (offset > pC->
13c00 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
13c10 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63     ){.        rc
13c20 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
13c30 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
13c40 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13c50 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
13c60 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61    }..    /* If a
13c70 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65  fter trying to e
13c80 78 74 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73  xtra new entries
13c90 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
13ca0 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
13cb0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
13cc0 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
13cd0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
13ce0 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
13cf0 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
13d00 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
13d10 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
13d20 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
13d30 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
13d40 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
13d50 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
13d60 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
13d70 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
13d80 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
13d90 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
13da0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
13db0 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
13dc0 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13dd0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13de0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13df0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
13e00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
13e10 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
13e20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
13e30 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
13e40 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
13e50 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
13e60 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
13e70 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
13e80 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
13e90 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
13ea0 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
13eb0 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
13ec0 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
13ed0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
13ee0 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
13ef0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
13f00 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
13f10 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
13f20 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
13f30 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
13f40 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
13f50 28 70 44 65 73 74 29 20 29 20 73 71 6c 69 74 65  (pDest) ) sqlite
13f60 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
13f70 70 44 65 73 74 29 3b 0a 20 20 74 20 3d 20 70 43  pDest);.  t = pC
13f80 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 69  ->aType[p2];.  i
13f90 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
13fa0 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
13fb0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
13fc0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
13fd0 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
13fe0 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
13ff0 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
14000 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
14010 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
14020 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
14030 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73  ow page */.    s
14040 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14050 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66  Get(pC->aRow+aOf
14060 66 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65  fset[p2], t, pDe
14070 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  st);.  }else{.  
14080 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
14090 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
140a0 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
140b0 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
140c0 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
140d0 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
140e0 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
140f0 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
14100 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
14110 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
14120 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
14130 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
14140 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
14150 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
14160 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
14170 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
14180 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
14190 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
141a0 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
141b0 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
141c0 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
141d0 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
141e0 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
141f0 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
14200 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
14210 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
14220 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
14230 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
14240 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
14250 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
14260 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
14270 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
14280 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
14290 4c 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  L will work for 
142a0 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74  the value for st
142b0 72 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61  rings.      ** a
142c0 6e 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61  nd blobs and wha
142d0 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
142e0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
142f0 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20  riable.      ** 
14300 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
14310 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a  erything else. *
14320 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
14330 64 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d  dbeSerialGet(t<=
14340 31 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f  13 ? (u8*)&paylo
14350 61 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c  adSize64 : 0, t,
14360 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
14370 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
14380 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14390 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
143a0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
143b0 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20  !pC->isTable,.  
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
143f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14400 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14410 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
14420 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
14430 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14440 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29  lGet((const u8*)
14450 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65  pDest->z, t, pDe
14460 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  st);.      pDest
14470 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
14480 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  Ephem;.    }.  }
14490 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20  .  pDest->enc = 
144a0 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f  encoding;..op_co
144b0 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49  lumn_out:.  /* I
144c0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
144d0 75 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72  ue is an ephemer
144e0 61 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68  al string, go ah
144f0 65 61 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a  ead and persist.
14500 20 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67    ** that string
14510 20 69 6e 20 63 61 73 65 20 74 68 65 20 63 75 72   in case the cur
14520 73 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65  sor moves before
14530 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
14540 65 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20  e is.  ** used. 
14550 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
14560 6f 64 65 20 64 6f 65 73 20 74 68 65 20 65 71 75  ode does the equ
14570 69 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68  ivalent of Deeph
14580 65 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a  emeralize().  **
14590 20 62 75 74 20 64 6f 65 73 20 69 74 20 66 61 73   but does it fas
145a0 74 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70  ter. */.  if( (p
145b0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
145c0 4d 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70  M_Ephem)!=0 && p
145d0 44 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66  Dest->z ){.    f
145e0 78 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  x = pDest->flags
145f0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
14600 42 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72  Blob);.    asser
14610 74 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20  t( fx!=0 );.    
14620 7a 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75  zData = (const u
14630 38 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20  8*)pDest->z;.   
14640 20 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b   len = pDest->n;
14650 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
14660 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
14670 65 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e  esize(pDest, len
14680 2b 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  +2) ) goto no_me
14690 6d 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44  m;.    memcpy(pD
146a0 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
146b0 65 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  en);.    pDest->
146c0 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
146d0 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
146e0 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  = 0;.    pDest->
146f0 66 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54  flags = fx|MEM_T
14700 65 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75  erm;.  }.op_colu
14710 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41  mn_error:.  UPDA
14720 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
14730 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
14740 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
14750 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
14760 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14770 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
14780 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
14790 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
147a0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70  1@P2]).**.** App
147b0 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
147c0 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
147d0 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
147e0 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
147f0 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
14800 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
14810 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
14820 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
14830 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
14840 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
14850 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
14860 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
14870 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
14880 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
14890 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
148a0 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
148b0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
148c0 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54  Affinity;   /* T
148d0 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
148e0 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63  e applied */.  c
148f0 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20  har cAff;       
14900 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
14910 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66  gle character of
14920 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20   affinity */..  
14930 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
14940 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
14950 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b   zAffinity!=0 );
14960 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
14970 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
14980 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
14990 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
149a0 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28  hile( (cAff = *(
149b0 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30  zAffinity++))!=0
149c0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
149d0 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d  pIn1 <= &p->aMem
149e0 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
149f0 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
14a00 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
14a10 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70  (pIn1) );.    ap
14a20 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
14a30 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
14a40 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
14a50 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
14a60 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
14a70 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
14a80 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
14a90 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
14aa0 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
14ab0 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
14ac0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
14ad0 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
14ae0 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
14af0 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
14b00 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
14b10 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
14b20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
14b30 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
14b40 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
14b50 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
14b60 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
14b70 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
14b80 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
14b90 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
14ba0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
14bb0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
14bc0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
14bd0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
14be0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
14bf0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
14c00 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
14c10 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
14c20 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
14c30 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
14c40 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
14c50 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
14c60 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
14c70 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
14c80 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
14c90 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
14ca0 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
14cb0 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
14cc0 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NONE..*/.case OP
14cd0 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
14ce0 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
14cf0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
14d00 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
14d10 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
14d20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14d30 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
14d40 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
14d50 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
14d60 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
14d70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14d80 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
14d90 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
14da0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
14db0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14dc0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
14dd0 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
14de0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14df0 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
14e00 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
14e10 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a  cord */.  i64 nZ
14e20 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
14e30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
14e40 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
14e50 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
14e60 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
14e70 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
14e80 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
14e90 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
14ea0 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
14eb0 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
14ec0 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
14ed0 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
14ee0 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
14ef0 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
14f00 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
14f10 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
14f20 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
14f30 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
14f40 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
14f50 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
14f60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14f70 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
14f80 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
14f90 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
14fa0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
14fb0 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
14fc0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
14fd0 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
14fe0 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
14ff0 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
15000 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
15010 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
15020 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
15030 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
15040 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e  ] header */.  in
15050 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
15060 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
15070 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
15080 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  [] content */.  
15090 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
150a0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
150b0 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
150c0 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
150d0 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
150e0 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
150f0 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
15100 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
15110 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
15120 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15160 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
15170 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
15180 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
15190 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
151a0 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
151b0 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
151c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15200 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
15210 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
15220 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
15230 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
15240 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
15250 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
15260 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
15270 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
15280 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
15290 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
152a0 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
152b0 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
152c0 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
152d0 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
152e0 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
152f0 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
15300 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
15310 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
15320 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
15330 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
15340 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
15350 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
15360 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
15370 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15380 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
15390 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
153a0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
153b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
153c0 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
153d0 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
153e0 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
153f0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
15400 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
15410 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15420 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
15430 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
15440 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
15450 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
15460 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
15470 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
15480 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15490 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  or)+1 );.  pData
154a0 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
154b0 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
154c0 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
154d0 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
154e0 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
154f0 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
15500 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
15510 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
15520 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
15530 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15540 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
15550 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
15560 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
15570 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
15580 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
15590 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
155a0 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20  .  /* Apply the 
155b0 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69  requested affini
155c0 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73  ty to all inputs
155d0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
155e0 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
155f0 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79  .  if( zAffinity
15600 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70   ){.    pRec = p
15610 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  Data0;.    do{. 
15620 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
15630 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66  ty(pRec++, *(zAf
15640 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
15650 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ing);.      asse
15660 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  rt( zAffinity[0]
15670 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61  ==0 || pRec<=pLa
15680 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65  st );.    }while
15690 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
156a0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  ;.  }..  /* Loop
156b0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
156c0 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
156d0 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
156e0 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
156f0 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
15700 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
15710 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
15720 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63  ord..  */.  pRec
15730 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a   = pLast;.  do{.
15740 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
15750 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
15760 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
15770 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20  = serial_type = 
15780 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15790 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
157a0 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65  _format);.    le
157b0 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  n = sqlite3VdbeS
157c0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72  erialTypeLen(ser
157d0 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
157e0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
157f0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
15800 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
15810 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
15820 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
15830 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65  (pRec);.      }e
15840 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
15850 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
15860 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
15870 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
15880 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
15890 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
158a0 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
158b0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
158c0 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
158d0 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
158e0 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
158f0 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
15900 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
15910 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
15920 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c  l_type);.  }whil
15930 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61  e( (--pRec)>=pDa
15940 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56 49  ta0 );..  /* EVI
15950 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36  DENCE-OF: R-2256
15960 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64  4-11647 The head
15970 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
15980 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20   single varint. 
15990 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d   ** which determ
159a0 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
159b0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
159c0 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68  n the header. Th
159d0 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61  e varint.  ** va
159e0 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
159f0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
15a00 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67   bytes including
15a10 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
15a20 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f  .  ** itself. */
15a30 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
15a40 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74  r==126 );.  test
15a50 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20  case( nHdr==127 
15a60 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31  );.  if( nHdr<=1
15a70 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  26 ){.    /* The
15a80 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a   common case */.
15a90 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20      nHdr += 1;. 
15aa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
15ab0 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65  are case of a re
15ac0 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65  ally large heade
15ad0 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74  r */.    nVarint
15ae0 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
15af0 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e  Len(nHdr);.    n
15b00 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a  Hdr += nVarint;.
15b10 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c      if( nVarint<
15b20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
15b30 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b  (nHdr) ) nHdr++;
15b40 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
15b50 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28  Hdr+nData;.  if(
15b60 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d   nByte+nZero>db-
15b70 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
15b80 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
15b90 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
15ba0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
15bb0 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
15bc0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
15bd0 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
15be0 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
15bf0 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
15c00 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
15c10 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
15c20 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
15c30 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
15c40 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
15c50 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
15c60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
15c70 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
15c80 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
15c90 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
15ca0 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
15cb0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
15cc0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
15cd0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
15ce0 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
15cf0 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
15d00 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
15d10 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
15d20 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
15d30 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
15d40 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15d50 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
15d60 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
15d70 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
15d80 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
15d90 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
15da0 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
15db0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
15dc0 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
15dd0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
15de0 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
15df0 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
15e00 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
15e10 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
15e20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
15e30 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
15e40 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69  column. */.    i
15e50 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
15e60 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
15e70 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
15e80 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
15e90 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f  al type */.    /
15ea0 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
15eb0 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65  -64536-51728 The
15ec0 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
15ed0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
15ee0 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d  ecord.    ** imm
15ef0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
15f00 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
15f10 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56     j += sqlite3V
15f20 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
15f30 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65  ewRecord[j], pRe
15f40 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  c, serial_type);
15f50 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20   /* content */. 
15f60 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63   }while( (++pRec
15f70 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73  )<=pLast );.  as
15f80 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b  sert( i==nHdr );
15f90 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42  .  assert( j==nB
15fa0 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
15fb0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
15fc0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
15fd0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
15fe0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
15ff0 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
16000 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
16010 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
16020 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
16030 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
16040 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
16050 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70  EM_Zero;.  }.  p
16060 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
16070 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
16080 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
16090 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74  ever converted t
160a0 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49  o text */.  REGI
160b0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
160c0 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
160d0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
160e0 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
160f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
16100 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
16110 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
16120 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
16130 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
16140 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
16150 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
16160 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
16170 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
16180 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
16190 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
161a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
161b0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
161c0 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
161d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
161e0 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
161f0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
16200 72 73 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20  rsr;..  pCrsr = 
16210 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
16220 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  ]->pCursor;.  as
16230 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
16240 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a   nEntry = 0;  /*
16250 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
16260 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
16270 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
16280 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
16290 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
162a0 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75   &nEntry);.  pOu
162b0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
162c0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
162d0 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
162e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
162f0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
16300 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
16310 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
16320 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
16330 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
16340 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
16350 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
16360 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
16370 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
16380 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
16390 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
163a0 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
163b0 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
163c0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
163d0 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
163e0 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
163f0 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
16400 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
16410 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
16440 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
16450 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
16480 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
16490 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
164a0 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
164b0 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
164c0 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
164d0 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
164e0 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
164f0 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
16500 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
16510 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
16520 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
16530 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
16540 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
16550 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
16560 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
16570 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
16580 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
16590 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
165a0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
165b0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
165c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
165d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
165e0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
165f0 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
16600 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
16610 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
16620 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
16630 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
16640 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16650 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
16660 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
16670 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
16680 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  db) );.  assert(
16690 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
166a0 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
166b0 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
166c0 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65     if( db->nVdbe
166d0 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
166e0 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f   /* A new savepo
166f0 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  int cannot be cr
16700 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61  eated if there a
16710 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20  re active write 
16720 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d  .      ** statem
16730 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20  ents (i.e. open 
16740 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65  read/write incre
16750 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64  mental blob hand
16760 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  les)..      */. 
16770 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
16780 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
16790 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f  g, db, "cannot o
167a0 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
167b0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
167c0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
167d0 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
167e0 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
167f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
16800 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    nName = sqlite
16810 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
16820 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
16830 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
16840 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  BLE.      /* Thi
16850 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
16860 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
16870 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
16880 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
16890 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
168a0 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
168b0 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
168c0 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
168d0 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
168e0 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
168f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
16900 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
16910 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
16920 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
16930 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
16940 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
16950 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
16960 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
16970 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
16980 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
16990 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
169a0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
169b0 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
169c0 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IN,.            
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
169f0 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  nt+db->nSavepoin
16a00 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
16a10 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
16a20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
16a30 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
16a40 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
16a50 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
16a60 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
16a70 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
16a80 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
16a90 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
16aa0 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
16ab0 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
16ac0 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
16ad0 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
16ae0 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
16af0 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
16b00 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
16b10 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
16b20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
16b30 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
16b40 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
16b50 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
16b60 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
16b70 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
16b80 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
16b90 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
16ba0 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
16bb0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
16bc0 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
16bd0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
16be0 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
16bf0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16c00 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
16c10 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
16c20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20   }.    .        
16c30 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
16c40 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
16c50 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
16c60 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
16c70 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
16c80 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
16c90 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
16ca0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
16cb0 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
16cc0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
16cd0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
16ce0 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ns;.        pNew
16cf0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
16d00 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
16d10 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
16d20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
16d30 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
16d40 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
16d50 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
16d60 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
16d70 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
16d80 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
16d90 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
16da0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
16db0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
16dc0 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
16dd0 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
16de0 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
16df0 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
16e00 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
16e10 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
16e20 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
16e30 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
16e40 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
16e50 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
16e60 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
16e70 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
16e80 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
16e90 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
16ea0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20  ErrMsg, db, "no 
16eb0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
16ec0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
16ed0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
16ee0 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
16ef0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
16f00 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
16f10 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
16f20 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
16f30 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
16f40 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
16f50 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
16f60 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
16f70 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
16f80 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
16f90 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
16fa0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
16fb0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20  >zErrMsg, db, . 
16fc0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72         "cannot r
16fd0 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
16fe0 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
16ff0 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20  s in progress". 
17000 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63       );.      rc
17010 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17020 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
17030 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
17040 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
17050 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
17060 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
17070 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
17080 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
17090 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
170a0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
170b0 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
170c0 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
170d0 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
170e0 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
170f0 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
17100 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
17110 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17120 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
17130 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
17140 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
17150 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
17160 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d         if( (rc =
17170 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
17180 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
17190 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
171a0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
171b0 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
171c0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
171d0 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
171e0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
171f0 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
17200 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
17210 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
17220 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
17230 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
17240 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
17250 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
17260 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17270 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
17280 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17290 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
172a0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
172b0 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
172c0 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
172d0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
172e0 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68         int isSch
172f0 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20  emaChange;.     
17300 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
17310 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
17320 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
17330 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
17340 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
17350 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ACK ){.         
17360 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
17370 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  = (db->flags & S
17380 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
17390 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20  ges)!=0;.       
173a0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
173b0 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
173c0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d              rc =
173d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69   sqlite3BtreeTri
173e0 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e  pAllCursors(db->
173f0 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20  aDb[ii].pBt,.   
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54      SQLITE_ABORT
17430 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20  _ROLLBACK,.     
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
17470 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ==0);.          
17480 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
17490 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
174a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
174b0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
174c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
174d0 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
174e0 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ge = 0;.        
174f0 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69  }.        for(ii
17500 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
17510 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
17520 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
17530 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e  eeSavepoint(db->
17540 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c  aDb[ii].pBt, p1,
17550 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
17560 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
17570 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17580 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
17590 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
175a0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
175b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
175c0 69 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e  if( isSchemaChan
175d0 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ge ){.          
175e0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
175f0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
17600 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  db);.          s
17610 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
17620 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
17630 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  n(db);.         
17640 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62   db->flags = (db
17650 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45  ->flags | SQLITE
17660 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b  _InternChanges);
17670 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
17680 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
17690 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
176a0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
176b0 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
176c0 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
176d0 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
176e0 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
176f0 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
17700 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
17710 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
17720 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
17730 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
17740 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
17750 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
17760 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
17770 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
17780 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
17790 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
177a0 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
177b0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
177c0 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
177d0 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
177e0 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
177f0 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
17800 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
17810 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
17820 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
17830 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
17840 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
17850 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
17860 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
17870 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
17880 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
17890 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
178a0 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
178b0 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
178c0 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
178d0 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
178e0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
178f0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
17900 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
17910 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
17920 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
17930 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
17940 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
17950 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
17960 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
17970 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
17980 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
17990 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
179a0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
179b0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
179c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
179d0 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
179e0 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
179f0 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
17a00 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
17a10 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
17a20 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
17a30 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
17a40 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
17a50 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
17a60 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f  on || p1==SAVEPO
17a70 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
17a80 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
17a90 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
17aa0 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
17ab0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
17ac0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17ad0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17ae0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17af0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
17b00 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
17b10 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
17b20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
17b30 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
17b40 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
17b50 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
17b60 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
17b70 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
17b80 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
17b90 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
17ba0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
17bb0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
17bc0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
17bd0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
17be0 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
17bf0 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
17c00 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
17c10 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
17c20 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
17c30 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
17c40 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
17c50 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
17c60 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
17c70 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
17c80 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
17c90 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
17ca0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
17cb0 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
17cc0 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a    int turnOnAC;.
17cd0 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
17ce0 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
17cf0 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
17d00 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41  p->p2;.  turnOnA
17d10 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43  C = desiredAutoC
17d20 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75  ommit && !db->au
17d30 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65  toCommit;.  asse
17d40 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
17d50 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69  ommit==1 || desi
17d60 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  redAutoCommit==0
17d70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65   );.  assert( de
17d80 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
17d90 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d  =1 || iRollback=
17da0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
17db0 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e  db->nVdbeActive>
17dc0 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73  0 );  /* At leas
17dd0 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73  t this one VM is
17de0 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73   active */.  ass
17df0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
17e00 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66  r );..#if 0.  if
17e10 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 69 52  ( turnOnAC && iR
17e20 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
17e30 56 64 62 65 41 63 74 69 76 65 3e 31 20 29 7b 0a  VdbeActive>1 ){.
17e40 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
17e50 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
17e60 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b  ments a ROLLBACK
17e70 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
17e80 72 65 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  re.    ** still 
17e90 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74  running, and a t
17ea0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
17eb0 74 69 76 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  tive, return an 
17ec0 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17ed0 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65  .    ** that the
17ee0 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20   other VMs must 
17ef0 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20  complete first. 
17f00 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
17f10 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
17f20 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63  >zErrMsg, db, "c
17f30 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  annot rollback t
17f40 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
17f50 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
17f60 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
17f70 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
17f80 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
17f90 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  lse.#endif.  if(
17fa0 20 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52   turnOnAC && !iR
17fb0 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e  ollback && db->n
17fc0 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
17fd0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
17fe0 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
17ff0 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
18000 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
18010 77 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72  writing.    ** r
18020 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
18030 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74  ndicating that t
18040 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73  he other VMs mus
18050 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74  t complete first
18060 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71  . .    */.    sq
18070 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
18080 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
18090 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
180a0 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
180b0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
180c0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
180d0 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53  ss");.    rc = S
180e0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
180f0 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
18100 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
18110 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
18120 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
18130 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
18140 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18150 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
18160 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
18170 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
18180 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
18190 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
181a0 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
181b0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
181c0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
181d0 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
181e0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
181f0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
18200 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
18210 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
18220 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
18230 69 74 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71  it;.      if( sq
18240 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
18250 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
18260 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
18270 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
18280 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61  );.        db->a
18290 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
182a0 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
182b0 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70  mmit);.        p
182c0 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
182d0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
182e0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
182f0 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  n;.      }.    }
18300 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
18310 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >nStatement==0 )
18320 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f  ;.    sqlite3Clo
18330 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29  seSavepoints(db)
18340 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d  ;.    if( p->rc=
18350 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18360 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18370 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  DONE;.    }else{
18380 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18390 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
183a0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
183b0 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  turn;.  }else{. 
183c0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
183d0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
183e0 20 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64   db,.        (!d
183f0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
18400 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
18410 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
18420 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
18430 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
18440 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
18450 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
18460 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
18470 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
18480 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
18490 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
184a0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
184b0 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
184c0 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
184d0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
184e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
184f0 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e  ode: Transaction
18500 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
18510 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
18520 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74  ansaction on dat
18530 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72  abase P1 if a tr
18540 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
18550 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69   already.** acti
18560 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  ve..** If P2 is 
18570 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
18580 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18590 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f  on is started, o
185a0 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d  r if a .** read-
185b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
185c0 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69  lready active, i
185d0 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f  t is upgraded to
185e0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
185f0 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tion..** If P2 i
18600 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72  s zero, then a r
18610 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
18620 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a  is started..**.*
18630 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
18640 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
18650 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
18660 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
18670 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
18680 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
18690 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
186a0 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
186b0 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
186c0 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
186d0 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
186e0 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
186f0 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
18700 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
18710 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69  ..**.** If a wri
18720 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
18730 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68  s started and th
18740 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a  e Vdbe.usesStmtJ
18750 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a  ournal flag is.*
18760 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61  * true (this fla
18770 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  g is set if the 
18780 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20  Vdbe may modify 
18790 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
187a0 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72  w and may.** thr
187b0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
187c0 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d  ption), a statem
187d0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
187e0 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e  may also be open
187f0 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63  ed..** More spec
18800 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74  ifically, a stat
18810 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18820 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20  n is opened iff 
18830 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
18840 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
18850 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61  rrently not in a
18860 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20  utocommit mode, 
18870 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
18880 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20  other.** active 
18890 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74  statements. A st
188a0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
188b0 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63  ion allows the c
188c0 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74  hanges made by t
188d0 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62  his.** VDBE to b
188e0 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
188f0 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
18900 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
18910 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
18920 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
18930 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20  on. If no error 
18940 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20  is encountered, 
18950 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
18960 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c  ansaction.** wil
18970 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
18980 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
18990 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
189a0 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
189b0 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f  this opcode also
189c0 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65   checks the sche
189d0 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73  ma cookie agains
189e0 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20  t P3.** and the 
189f0 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
18a00 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73  n counter agains
18a10 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f  t P4..** The coo
18a20 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
18a30 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
18a40 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
18a50 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
18a60 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
18a70 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
18a80 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
18a90 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
18aa0 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
18ab0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
18ac0 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
18ad0 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66   the schema.  If
18ae0 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63   the schema.** c
18af0 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66  ookie in P3 diff
18b00 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68  ers from the sch
18b10 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68  ema cookie in th
18b20 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
18b30 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73  r or.** if the s
18b40 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
18b50 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64   counter in P4 d
18b60 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
18b70 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72  current.** gener
18b80 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74  ation counter, t
18b90 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43  hen an SQLITE_SC
18ba0 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61  HEMA error is ra
18bb0 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69  ised and executi
18bc0 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68  on.** halts.  Th
18bd0 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
18be0 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f   wrapper functio
18bf0 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70  n might then rep
18c00 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74  repare the.** st
18c10 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75  atement and reru
18c20 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65  n it from the be
18c30 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65  ginning..*/.case
18c40 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
18c50 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
18c60 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
18c70 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73  int iGen;..  ass
18c80 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
18c90 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
18ca0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c  ->readOnly==0 ||
18cb0 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
18cc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
18cd0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
18ce0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
18cf0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
18d00 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
18d10 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70  ->p1) );.  if( p
18d20 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66  Op->p2 && (db->f
18d30 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75  lags & SQLITE_Qu
18d40 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20  eryOnly)!=0 ){. 
18d50 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
18d60 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74  EADONLY;.    got
18d70 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18d80 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20  rror;.  }.  pBt 
18d90 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
18da0 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
18db0 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
18dc0 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
18dd0 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
18de0 70 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  p2);.    if( rc=
18df0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
18e00 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
18e10 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
18e20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
18e30 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18e40 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18e50 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
18e60 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18e70 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
18e80 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18e90 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
18ea0 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
18eb0 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
18ec0 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
18ed0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
18ee0 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
18ef0 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
18f00 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
18f10 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
18f20 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
18f30 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
18f40 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
18f50 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
18f60 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
18f70 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
18f80 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
18f90 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
18fa0 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
18fb0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
18fc0 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
18fd0 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
18fe0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
18ff0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
19000 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
19010 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
19020 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
19030 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
19040 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19050 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
19060 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
19070 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
19080 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
19090 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
190a0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
190b0 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
190c0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
190d0 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
190e0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
190f0 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
19100 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
19110 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
19120 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
19130 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
19140 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
19150 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
19160 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
19170 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
19180 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
19190 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
191a0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
191b0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47  .    }..    /* G
191c0 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61  ather the schema
191d0 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
191e0 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20  for checking:.  
191f0 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
19200 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d  ION-OF: R-32195-
19210 31 39 34 36 35 20 54 68 65 20 73 63 68 65 6d 61  19465 The schema
19220 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64   version is used
19230 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2a   by SQLite.    *
19240 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75  * each time a qu
19250 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
19260 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
19270 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68  he internal cach
19280 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  e of the.    ** 
19290 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e  schema used when
192a0 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53   compiling the S
192b0 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73  QL query matches
192c0 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74   the schema of t
192d0 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61  he.    ** databa
192e0 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63 68  se against which
192f0 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
19300 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20  ery is actually 
19310 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f  executed..    */
19320 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
19330 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
19340 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
19350 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
19360 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
19370 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19380 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
19390 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
193a0 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
193b0 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
193c0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
193d0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
193e0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
193f0 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
19400 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
19410 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
19420 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
19430 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
19440 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
19450 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
19460 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
19470 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
19480 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
19490 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
194a0 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
194b0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
194c0 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
194d0 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
194e0 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
194f0 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
19500 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
19510 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
19520 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
19530 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
19540 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
19550 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
19560 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
19570 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
19580 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
19590 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
195a0 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
195b0 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
195c0 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
195d0 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
195e0 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
195f0 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
19600 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
19610 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
19620 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
19630 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
19640 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
19650 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
19660 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
19670 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
19680 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
19690 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
196a0 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
196b0 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
196c0 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
196d0 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
196e0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
196f0 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
19700 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
19710 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
19720 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
19730 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
19740 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
19750 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
19760 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
19770 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19780 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
19790 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
197a0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
197b0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
197c0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
197d0 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
197e0 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
197f0 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
19800 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
19810 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
19820 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
19830 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
19840 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
19850 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
19860 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
19870 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
19880 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
19890 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
198a0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
198b0 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
198c0 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
198d0 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
198e0 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
198f0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
19900 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
19910 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
19920 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
19930 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
19940 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
19950 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
19960 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
19970 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
19980 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
19990 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
199a0 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
199b0 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
199c0 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
199d0 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
199e0 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
199f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
19a00 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
19a10 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
19a20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
19a30 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
19a40 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
19a50 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74  ookie;..  assert
19a60 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
19a70 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
19a80 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
19a90 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
19aa0 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
19ab0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
19ac0 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
19ad0 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
19ae0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
19af0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
19b00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
19b10 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
19b20 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
19b30 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
19b40 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
19b50 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
19b60 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
19b70 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
19b80 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
19b90 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
19ba0 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
19bb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
19bc0 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
19bd0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
19be0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
19bf0 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e   register P3 (in
19c00 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
19c10 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f  integer).** into
19c20 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
19c30 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  2 of database P1
19c40 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20  .  P2==1 is the 
19c50 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
19c60 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68   .** P2==2 is th
19c70 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
19c80 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  t. P2==3 is the 
19c90 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
19ca0 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
19cb0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
19cc0 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
19cd0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
19ce0 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
19cf0 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
19d00 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
19d10 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
19d20 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
19d30 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
19d40 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
19d50 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
19d60 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
19d70 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  _SetCookie: {   
19d80 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
19d90 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
19da0 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
19db0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
19dc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19dd0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
19de0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
19df0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
19e00 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
19e10 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
19e20 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
19e30 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
19e40 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
19e50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
19e60 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
19e70 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
19e80 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
19e90 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
19ea0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
19eb0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74  Op->p3];.  sqlit
19ec0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
19ed0 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
19ee0 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
19ef0 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
19f00 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
19f10 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
19f20 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
19f30 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
19f40 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
19f50 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
19f60 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
19f70 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
19f80 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
19f90 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
19fa0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
19fb0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
19fc0 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
19fd0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
19fe0 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
19ff0 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
1a000 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
1a010 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
1a020 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1a030 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
1a040 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
1a050 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
1a060 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
1a070 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
1a080 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1a090 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
1a0a0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
1a0b0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
1a0c0 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
1a0d0 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
1a0e0 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
1a0f0 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
1a100 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
1a110 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
1a120 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
1a130 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
1a140 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
1a150 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
1a160 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
1a170 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1a180 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20  de: OpenRead P1 
1a190 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1a1a0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1a1b0 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
1a1c0 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63  en a read-only c
1a1d0 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61  ursor for the da
1a1e0 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f  tabase table who
1a1f0 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a  se root page is.
1a200 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62  ** P2 in a datab
1a210 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64  ase file.  The d
1a220 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
1a230 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33  determined by P3
1a240 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e  . .** P3==0 mean
1a250 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
1a260 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73  ase, P3==1 means
1a270 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
1a280 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f  ed for .** tempo
1a290 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64  rary tables, and
1a2a0 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64   P3>1 means used
1a2b0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
1a2c0 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64  ng attached.** d
1a2d0 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74  atabase.  Give t
1a2e0 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e  he new cursor an
1a2f0 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50   identifier of P
1a300 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61  1.  The P1.** va
1a310 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65  lues need not be
1a320 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20   contiguous but 
1a330 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68  all P1 values sh
1a340 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e  ould be small in
1a350 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73  tegers..** It is
1a360 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31   an error for P1
1a370 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e   to be negative.
1a380 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
1a390 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e  then use the con
1a3a0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1a3b0 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20   P2 as the root 
1a3c0 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65  page, not.** the
1a3d0 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73   value of P2 its
1a3e0 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  elf..**.** There
1a3f0 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20   will be a read 
1a400 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
1a410 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68  base whenever th
1a420 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65  ere is an.** ope
1a430 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68  n cursor.  If th
1a440 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75  e database was u
1a450 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f  nlocked prior to
1a460 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1a470 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64  n.** then a read
1a480 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
1a490 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  d as part of thi
1a4a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
1a4b0 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61  A read.** lock a
1a4c0 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63  llows other proc
1a4d0 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68  esses to read th
1a4e0 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70  e database but p
1a4f0 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20  rohibits.** any 
1a500 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72  other process fr
1a510 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65  om modifying the
1a520 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
1a530 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  read lock is.** 
1a540 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c  released when al
1a550 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c  l cursors are cl
1a560 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69  osed.  If this i
1a570 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d  nstruction attem
1a580 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20  pts.** to get a 
1a590 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61  read lock but fa
1a5a0 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20  ils, the script 
1a5b0 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20  terminates with 
1a5c0 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  an.** SQLITE_BUS
1a5d0 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a  Y error code..**
1a5e0 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1a5f0 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1a600 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1a610 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1a620 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1a630 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1a640 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1a650 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1a660 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
1a670 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
1a680 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
1a690 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1a6a0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1a6b0 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1a6c0 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
1a6d0 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
1a6e0 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1a6f0 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1a700 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
1a710 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1a720 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1a730 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a740 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f  : OpenWrite, Reo
1a750 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  penIdx.*/./* Opc
1a760 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50  ode: ReopenIdx P
1a770 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1a780 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1a790 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1a7a0 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70  The ReopenIdx op
1a7b0 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74  code works exact
1a7c0 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e  ly like ReadOpen
1a7d0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1a7e0 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20  first.** checks 
1a7f0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75  to see if the cu
1a800 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c  rsor on P1 is al
1a810 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20  ready open with 
1a820 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e  a root page.** n
1a830 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20  umber of P2 and 
1a840 69 66 20 69 74 20 69 73 20 74 68 69 73 20 6f 70  if it is this op
1a850 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e  code becomes a n
1a860 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20  o-op.  In other 
1a870 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65  words,.** if the
1a880 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61   cursor is alrea
1a890 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20  dy open, do not 
1a8a0 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a  reopen it..**.**
1a8b0 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f   The ReopenIdx o
1a8c0 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62  pcode may only b
1a8d0 65 20 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d  e used with P5==
1a8e0 30 20 61 6e 64 20 77 69 74 68 20 50 34 20 62 65  0 and with P4 be
1a8f0 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49  ing.** a P4_KEYI
1a900 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72  NFO object.  Fur
1a910 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33  thermore, the P3
1a920 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74   value must be t
1a930 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76  he same as.** ev
1a940 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e  ery other Reopen
1a950 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20  Idx or OpenRead 
1a960 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72  for the same cur
1a970 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a  sor number..**.*
1a980 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65  * See the OpenRe
1a990 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65  ad opcode docume
1a9a0 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
1a9b0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
1a9c0 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
1a9d0 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
1a9e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1a9f0 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1aa00 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1aa10 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
1aa20 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
1aa30 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1aa40 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
1aa50 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20  ** page is P2.  
1aa60 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20  Or if P5!=0 use 
1aa70 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1aa80 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69  egister P2 to fi
1aa90 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70  nd the.** root p
1aaa0 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  age..**.** The P
1aab0 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1aac0 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1aad0 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1aae0 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1aaf0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1ab00 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1ab10 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1ab20 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1ab30 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1ab40 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1ab50 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1ab60 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1ab70 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1ab80 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1ab90 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1aba0 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1abb0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1abc0 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1abd0 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1abe0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1abf0 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74  e table, or to t
1ac00 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e  he.** largest in
1ac10 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d  dex of any colum
1ac20 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  n of the table t
1ac30 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  hat is actually 
1ac40 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  used..**.** This
1ac50 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
1ac60 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65  ks just like Ope
1ac70 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
1ac80 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
1ac90 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
1aca0 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f  /write mode.  Fo
1acb0 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c  r a given table,
1acc0 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e   there can be on
1acd0 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f  e or more read-o
1ace0 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f  nly.** cursors o
1acf0 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f  r a single read/
1ad00 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74  write cursor but
1ad10 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a   not both..**.**
1ad20 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65   See also OpenRe
1ad30 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ad..*/.case OP_R
1ad40 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e  eopenIdx: {.  in
1ad50 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49  t nField;.  KeyI
1ad60 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
1ad70 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69   int p2;.  int i
1ad80 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67  Db;.  int wrFlag
1ad90 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20  ;.  Btree *pX;. 
1ada0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
1adb0 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  r;.  Db *pDb;.. 
1adc0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1add0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1ade0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1adf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ae00 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1ae10 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70  FO );.  pCur = p
1ae20 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1ae30 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20  ;.  if( pCur && 
1ae40 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d  pCur->pgnoRoot==
1ae50 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a  (u32)pOp->p2 ){.
1ae60 20 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72      assert( pCur
1ae70 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29  ->iDb==pOp->p3 )
1ae80 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e  ;      /* Guaran
1ae90 74 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65  teed by the code
1aea0 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1aeb0 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73    goto open_curs
1aec0 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20  or_set_hints;.  
1aed0 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  }.  /* If the cu
1aee0 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72  rsor is not curr
1aef0 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73  ently open or is
1af00 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65   open on a diffe
1af10 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c  rent.  ** index,
1af20 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
1af30 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52  gh into OP_OpenR
1af40 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72  ead to force a r
1af50 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50  eopen */.case OP
1af60 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
1af70 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20  OP_OpenWrite:.. 
1af80 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
1af90 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  5&(OPFLAG_P2ISRE
1afa0 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  G|OPFLAG_BULKCSR
1afb0 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29  |OPFLAG_SEEKEQ))
1afc0 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61  ==pOp->p5 );.  a
1afd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1afe0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1aff0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c   || pOp->p5==0 |
1b000 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  | pOp->p5==OPFLA
1b010 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73  G_SEEKEQ );.  as
1b020 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1b030 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1b040 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1b050 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d  OpenRead || pOp-
1b060 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70  >opcode==OP_Reop
1b070 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20  enIdx.          
1b080 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  || p->readOnly==
1b090 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65  0 );..  if( p->e
1b0a0 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63  xpired ){.    rc
1b0b0 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f   = SQLITE_ABORT_
1b0c0 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62 72  ROLLBACK;.    br
1b0d0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  eak;.  }..  nFie
1b0e0 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e  ld = 0;.  pKeyIn
1b0f0 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70  fo = 0;.  p2 = p
1b100 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20  Op->p2;.  iDb = 
1b110 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1b120 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1b130 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1b140 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1b150 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
1b160 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  Db) );.  pDb = &
1b170 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
1b180 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
1b190 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
1b1a0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1b1b0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1b1c0 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  e ){.    wrFlag 
1b1d0 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  = 1;.    assert(
1b1e0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1b1f0 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1b200 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1b210 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1b220 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1b230 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1b240 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1b250 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1b260 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1b270 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1b280 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1b290 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1b2a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1b2b0 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1b2c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1b2d0 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1b2e0 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ( p2<=(p->nMem-p
1b2f0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1b300 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1b310 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
1b320 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
1b330 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1b340 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
1b350 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
1b360 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1b370 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
1b380 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
1b390 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
1b3a0 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
1b3b0 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
1b3c0 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
1b3d0 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
1b3e0 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
1b3f0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1b400 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
1b410 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
1b420 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
1b430 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
1b440 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
1b450 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
1b460 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
1b470 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
1b480 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
1b490 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1b4a0 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
1b4b0 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
1b4c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1b4d0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1b4e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b4f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1b500 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1b510 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1b520 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
1b530 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1b540 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74  Info;.    assert
1b550 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1b560 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1b570 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1b580 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1b590 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
1b5a0 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
1b5b0 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
1b5c0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1b5d0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1b5e0 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1b5f0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1b600 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b610 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b620 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1b630 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1b640 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1b650 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1b660 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1b670 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1b680 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1b690 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1b6a0 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31 29   nField, iDb, 1)
1b6b0 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1b6c0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1b6d0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1b6e0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1b6f0 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75  dered = 1;.  pCu
1b700 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32  r->pgnoRoot = p2
1b710 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1b720 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1b730 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1b740 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72  Info, pCur->pCur
1b750 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1b760 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1b770 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  o;.  /* Set the 
1b780 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1b790 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1b7a0 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1b7b0 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1b7c0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1b7d0 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1b7e0 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1b7f0 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1b800 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1b810 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1b820 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1b830 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1b840 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1b850 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1b860 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1b870 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1b880 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1b890 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65  P4_KEYINFO;..ope
1b8a0 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1b8b0 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50  ts:.  assert( OP
1b8c0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1b8d0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1b8e0 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1b8f0 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53  _SEEKEQ==BTREE_S
1b900 45 45 4b 5f 45 51 20 29 3b 0a 20 20 73 71 6c 69  EEK_EQ );.  sqli
1b910 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69  te3BtreeCursorHi
1b920 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73 6f  nts(pCur->pCurso
1b930 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f               (pO
1b950 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
1b960 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53  BULKCSR|OPFLAG_S
1b970 45 45 4b 45 51 29 29 29 3b 0a 20 20 62 72 65 61  EEKEQ)));.  brea
1b980 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b990 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50   OpenEphemeral P
1b9a0 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20  1 P2 * P4 P5.** 
1b9b0 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1b9c0 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  n=P2.**.** Open 
1b9d0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
1b9e0 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
1b9f0 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1ba00 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
1ba10 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
1ba20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
1ba30 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
1ba40 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
1ba50 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61   ephemeral.** ta
1ba60 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61  ble is deleted a
1ba70 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
1ba80 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1ba90 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32  closed..**.** P2
1baa0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1bab0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1bac0 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1bad0 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1bae0 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
1baf0 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
1bb00 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
1bb10 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
1bb20 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
1bb30 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
1bb40 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
1bb50 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
1bb60 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
1bb70 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
1bb80 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
1bb90 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  *.** The P5 para
1bba0 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d  meter can be a m
1bbb0 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45  ask of the BTREE
1bbc0 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
1bbd0 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20  .** in btree.h. 
1bbe0 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e   These flags con
1bbf0 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20  trol aspects of 
1bc00 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
1bc10 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20  .** the btree.  
1bc20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a  The BTREE_OMIT_J
1bc30 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45  OURNAL and BTREE
1bc40 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72  _SINGLE flags ar
1bc50 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d  e.** added autom
1bc60 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20  atically..*/./* 
1bc70 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f  Opcode: OpenAuto
1bc80 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34  index P1 P2 * P4
1bc90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1bca0 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a  nColumn=P2.**.**
1bcb0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1bcc0 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f  ks the same as O
1bcd0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e  P_OpenEphemeral.
1bce0 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69    It has a.** di
1bcf0 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20  fferent name to 
1bd00 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20  distinguish its 
1bd10 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65  use.  Tables cre
1bd20 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79  ated using.** by
1bd30 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
1bd40 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75  l be used for au
1bd50 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1bd60 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a  ted transient.**
1bd70 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e   indices in join
1bd80 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  s..*/.case OP_Op
1bd90 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61  enAutoindex: .ca
1bda0 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
1bdb0 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ral: {.  VdbeCur
1bdc0 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49  sor *pCx;.  KeyI
1bdd0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a  nfo *pKeyInfo;..
1bde0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
1bdf0 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20  nt vfsFlags = . 
1be00 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1be10 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20  _READWRITE |.   
1be20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43     SQLITE_OPEN_C
1be30 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51  REATE |.      SQ
1be40 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53  LITE_OPEN_EXCLUS
1be50 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  IVE |.      SQLI
1be60 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
1be70 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51  CLOSE |.      SQ
1be80 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49  LITE_OPEN_TRANSI
1be90 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74  ENT_DB;.  assert
1bea0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1beb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bec0 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1bed0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1bee0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1bef0 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
1bf00 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1bf10 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1bf20 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1bf30 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d  x->isEphemeral =
1bf40 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
1bf50 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e  e3BtreeOpen(db->
1bf60 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43  pVfs, 0, db, &pC
1bf70 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20  x->pBt, .       
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1bfa0 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47  NAL | BTREE_SING
1bfb0 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66  LE | pOp->p5, vf
1bfc0 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  sFlags);.  if( r
1bfd0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1bfe0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1bff0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
1c000 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20  pCx->pBt, 1);.  
1c010 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1c020 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
1c030 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
1c040 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
1c050 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
1c060 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
1c070 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1c080 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
1c090 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
1c0a0 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
1c0b0 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
1c0c0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1c0d0 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
1c0e0 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
1c0f0 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
1c100 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
1c110 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
1c120 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
1c130 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1c140 20 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66      if( (pKeyInf
1c150 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1c160 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20  Info)!=0 ){.    
1c170 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
1c180 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c190 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1c1a0 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
1c1b0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1c1c0 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
1c1d0 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1c1e0 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1c1f0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1c200 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1c210 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1c220 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1c230 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +1 );.        as
1c240 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1c250 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1c260 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1c270 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1c280 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d   );.        pCx-
1c290 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1c2a0 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63  Info;.        rc
1c2b0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1c2c0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1c2d0 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e 66  pgno, 1, pKeyInf
1c2e0 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  o, pCx->pCursor)
1c2f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1c300 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
1c310 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1c320 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1c330 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1c340 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
1c350 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43 75  , 1, 0, pCx->pCu
1c360 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78  rsor);.      pCx
1c370 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1c380 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d 3e     }.  }.  pCx->
1c390 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70  isOrdered = (pOp
1c3a0 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52  ->p5!=BTREE_UNOR
1c3b0 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b  DERED);.  break;
1c3c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1c3d0 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20  orterOpen P1 P2 
1c3e0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  P3 P4 *.**.** Th
1c3f0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1c400 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1c410 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1c420 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1c430 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1c440 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1c450 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1c460 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1c470 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1c480 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1c490 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a  rt algorithm..**
1c4a0 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20  .** If argument 
1c4b0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P3 is non-zero, 
1c4c0 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65  then it indicate
1c4d0 73 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65  s that the sorte
1c4e0 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20  r may.** assume 
1c4f0 74 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f  that a stable so
1c500 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74  rt considering t
1c510 68 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c  he first P3 fiel
1c520 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65  ds of each.** ke
1c530 79 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20  y is sufficient 
1c540 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72  to produce the r
1c550 65 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e  equired results.
1c560 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1c570 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1c580 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1c590 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1c5a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c5b0 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1c5c0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1c5d0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1c5e0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1c5f0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1c600 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1c610 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1c620 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1c630 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1c640 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64  >pKeyInfo->db==d
1c650 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
1c660 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
1c670 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1c680 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1c690 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70  SorterInit(db, p
1c6a0 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20  Op->p3, pCx);.  
1c6b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1c6c0 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73  ode: SequenceTes
1c6d0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
1c6e0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63   Synopsis: if( c
1c6f0 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20  ursor[P1].ctr++ 
1c700 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20  ) pc = P2.**.** 
1c710 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
1c720 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65  ursor. If the se
1c730 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69  quence counter i
1c740 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
1c750 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  , jump.** to P2.
1c760 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
1c770 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
1c780 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
1c790 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a   increment the.*
1c7a0 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76  * the sequence v
1c7b0 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
1c7c0 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b  _SequenceTest: {
1c7d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c7e0 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
1c7f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1c800 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1c810 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1c820 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1c830 65 72 74 28 20 70 43 2d 3e 70 53 6f 72 74 65 72  ert( pC->pSorter
1c840 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73   );.  if( (pC->s
1c850 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b  eqCount++)==0 ){
1c860 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
1c870 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
1c880 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1c890 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
1c8a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1c8b0 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73  psis: P3 columns
1c8c0 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20   in r[P2].**.** 
1c8d0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1c8e0 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
1c8f0 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
1c900 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
1c910 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
1c920 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  ata.  The conten
1c930 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f  t of that one ro
1c940 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  w is the content
1c950 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65   of memory.** re
1c960 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f  gister P2.  In o
1c970 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73  ther words, curs
1c980 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e  or P1 becomes an
1c990 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a   alias for the .
1c9a0 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74  ** MEM_Blob cont
1c9b0 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ent contained in
1c9c0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1c9d0 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
1c9e0 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
1c9f0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
1ca00 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67  d to hold a sing
1ca10 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
1ca20 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
1ca30 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
1ca40 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
1ca50 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
1ca60 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
1ca70 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
1ca80 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f  n opcode.  The O
1ca90 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a  P_Column opcode.
1caa0 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  ** is the only c
1cab0 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61  ursor opcode tha
1cac0 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70  t works with a p
1cad0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
1cae0 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d  ** P3 is the num
1caf0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1cb00 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61   the records tha
1cb10 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  t will be stored
1cb20 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64   by.** the pseud
1cb30 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
1cb40 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
1cb50 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1cb60 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1cb70 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1cb80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1cb90 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1cba0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1cbb0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1cbc0 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66 28 20  , -1, 0);.  if( 
1cbd0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1cbe0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1cbf0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1cc00 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20  >pseudoTableReg 
1cc10 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
1cc20 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1cc30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1cc40 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
1cc50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1cc60 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
1cc70 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
1cc80 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
1cc90 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
1cca0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
1ccb0 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
1ccc0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1ccd0 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
1cce0 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
1ccf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1cd00 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1cd10 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
1cd20 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1cd30 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1cd40 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
1cd50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
1cd60 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1cd70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1cd80 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GE P1 P2 P3 P4 *
1cd90 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1cda0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1cdb0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1cdc0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1cdd0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1cde0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1cdf0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1ce00 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1ce10 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
1ce20 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
1ce30 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1ce40 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1ce50 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1ce60 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1ce70 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1ce80 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1ce90 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1cea0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1ceb0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1cec0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1ced0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1cee0 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1cef0 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1cf00 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1cf10 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1cf20 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1cf30 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
1cf40 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1cf50 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1cf60 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1cf70 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1cf80 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1cf90 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1cfa0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1cfb0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1cfc0 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1cfd0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1cfe0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1cff0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1d000 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1d010 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1d020 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1d030 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1d040 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1d050 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1d060 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
1d070 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1d080 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34  ekGT P1 P2 P3 P4
1d090 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1d0a0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1d0b0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1d0c0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1d0d0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1d0e0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1d0f0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1d100 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1d110 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1d120 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1d130 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1d140 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1d150 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1d160 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1d170 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1d180 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1d190 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1d1a0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1d1b0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1d1c0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1d1d0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1d1e0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1d1f0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1d200 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
1d210 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1d220 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
1d230 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
1d240 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1d250 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1d260 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1d270 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1d280 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1d290 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1d2a0 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
1d2b0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1d2c0 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
1d2d0 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
1d2e0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1d2f0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1d300 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
1d310 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
1d320 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1d330 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1d340 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
1d350 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1d360 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50  ode: SeekLT P1 P
1d370 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79  2 P3 P4 * .** Sy
1d380 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1d390 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1d3a0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1d3b0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1d3c0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1d3d0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1d3e0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1d3f0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1d400 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1d410 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1d420 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1d430 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1d440 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1d450 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1d460 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1d470 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1d480 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1d490 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1d4a0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1d4b0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1d4c0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1d4d0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1d4e0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
1d4f0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1d500 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1d510 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
1d520 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1d530 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1d540 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1d550 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1d560 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1d570 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1d580 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1d590 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1d5a0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1d5b0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1d5c0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1d5d0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1d5e0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1d5f0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1d600 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1d610 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1d620 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1d630 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1d640 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20  code: SeekLE P1 
1d650 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1d660 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1d670 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1d680 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1d690 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1d6a0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1d6b0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1d6c0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1d6d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1d6e0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1d6f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1d700 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1d710 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1d720 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1d730 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1d740 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1d750 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1d760 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1d770 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1d780 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1d790 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1d7a0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1d7b0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1d7c0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1d7d0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1d7e0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1d7f0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1d800 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1d810 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1d820 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1d830 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1d840 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1d850 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1d860 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1d870 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
1d880 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
1d890 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
1d8a0 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
1d8b0 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
1d8c0 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1d8d0 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1d8e0 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
1d8f0 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Next..**.** See
1d900 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1d910 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
1d920 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1d930 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54  /.case OP_SeekLT
1d940 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1d950 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1d960 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
1d970 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1d980 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
1d990 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1d9a0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1d9b0 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
1d9c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1d9d0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  /.  int res;.  i
1d9e0 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72  nt oc;.  VdbeCur
1d9f0 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63  sor *pC;.  Unpac
1da00 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69  kedRecord r;.  i
1da10 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34  nt nField;.  i64
1da20 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
1da30 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1da40 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
1da50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1da60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1da70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1da80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1da90 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1daa0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1dab0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1dac0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1dad0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1dae0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
1daf0 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53  P_SeekLE == OP_S
1db00 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73  eekLT+1 );.  ass
1db10 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d  ert( OP_SeekGE =
1db20 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b  = OP_SeekLT+2 );
1db30 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1db40 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGT == OP_SeekL
1db50 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+3 );.  assert(
1db60 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
1db70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1db80 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1db90 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1dba0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1dbb0 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
1dbc0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1dbd0 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1dbe0 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  ode;.#endif..  /
1dbf0 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77  * For a cursor w
1dc00 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45  ith the BTREE_SE
1dc10 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79  EK_EQ hint, only
1dc20 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61   the OP_SeekGE a
1dc30 6e 64 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c  nd.  ** OP_SeekL
1dc40 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c  E opcodes are al
1dc50 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65  lowed, and these
1dc60 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61   must be immedia
1dc70 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20  tely followed.  
1dc80 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47  ** by an OP_IdxG
1dc90 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70  T or OP_IdxLT op
1dca0 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65  code, respective
1dcb0 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d  ly, with the sam
1dcc0 65 20 6b 65 79 2e 0a 20 20 2a 2f 0a 23 69 66 64  e key..  */.#ifd
1dcd0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1dce0 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72    if( sqlite3Btr
1dcf0 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28  eeCursorHasHint(
1dd00 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 42 54 52  pC->pCursor, BTR
1dd10 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20  EE_SEEK_EQ) ){. 
1dd20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1dd30 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47  opcode==OP_SeekG
1dd40 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
1dd50 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
1dd60 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1dd70 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
1dd80 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
1dd90 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
1dda0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1ddb0 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p1==pOp[0].p
1ddc0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1ddd0 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b   pOp[1].p2==pOp[
1dde0 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 61 73 73  0].p2 );.    ass
1ddf0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d  ert( pOp[1].p3==
1de00 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20  pOp[0].p3 );.   
1de10 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1de20 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e  p4.i==pOp[0].p4.
1de30 69 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i );.  }.#endif.
1de40 20 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61   .  if( pC->isTa
1de50 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  ble ){.    /* Th
1de60 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
1de70 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
1de80 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
1de90 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
1dea0 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72  .    ** blob, or
1deb0 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
1dec0 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
1ded0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
1dee0 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68  can do.    ** th
1def0 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65  e seek, so conve
1df00 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49  rt it. */.    pI
1df10 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1df20 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49  p3];.    if( (pI
1df30 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
1df40 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
1df50 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
1df60 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e   ){.      applyN
1df70 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1df80 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  In3, 0);.    }. 
1df90 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1dfa0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1dfb0 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  n3);..    /* If 
1dfc0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1dfd0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1dfe0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1dff0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1e000 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
1e010 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
1e020 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
1e030 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
1e040 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  /.    if( (pIn3-
1e050 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1e060 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
1e070 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1e080 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
1e090 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
1e0a0 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
1e0b0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1e0c0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
1e0d0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
1e0e0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1e0f0 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1e100 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1e110 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64  P2 */.        Vd
1e120 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1e130 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2); goto jump_to
1e140 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65  _p2;.        bre
1e150 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ak;.      }..   
1e160 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
1e170 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
1e180 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  is larger than t
1e190 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1e1a0 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1e1b0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1e1c0 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66  >= for > and < f
1e1d0 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74  or <=. e.g. if t
1e1e0 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20  he search term. 
1e1f0 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61       ** is 4.9 a
1e200 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  nd the integer a
1e210 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a  pproximation 5:.
1e220 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
1e230 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34  *        (x >  4
1e240 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
1e250 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20   >= 5).      ** 
1e260 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39         (x <= 4.9
1e270 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c  )    ->     (x <
1e280 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20    5).      */.  
1e290 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
1e2a0 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r<(double)iKey )
1e2b0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1e2c0 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50  ( OP_SeekGE==(OP
1e2d0 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20  _SeekGT-1) );.  
1e2e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1e2f0 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65  _SeekLT==(OP_See
1e300 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kLE-1) );.      
1e310 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
1e320 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLE & 0x0001)==
1e330 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1e340 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
1e350 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
1e360 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1e370 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a  0x0001) ) oc--;.
1e380 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1e390 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1e3a0 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73  mation iKey is s
1e3b0 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20  maller than the 
1e3c0 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1e3d0 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1e3e0 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20  , substitute <= 
1e3f0 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20  for < and > for 
1e400 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c  >=.  */.      el
1e410 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72  se if( pIn3->u.r
1e420 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  >(double)iKey ){
1e430 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e440 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f   OP_SeekLE==(OP_
1e450 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20  SeekLT+1) );.   
1e460 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1e470 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGT==(OP_Seek
1e480 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GE+1) );.       
1e490 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
1e4a0 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLT & 0x0001)==(
1e4b0 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30  OP_SeekGE & 0x00
1e4c0 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
1e4d0 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
1e4e0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ==(OP_SeekLT & 0
1e4f0 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20  x0001) ) oc++;. 
1e500 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20       }.    } .  
1e510 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e520 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1e530 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30  d(pC->pCursor, 0
1e540 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
1e550 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d  &res);.    pC->m
1e560 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b  ovetoTarget = iK
1e570 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20  ey;  /* Used by 
1e580 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20  OP_Delete */.   
1e590 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1e5a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1e5b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e5c0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ror;.    }.  }el
1e5d0 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  se{.    nField =
1e5e0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1e5f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1e600 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1e610 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69  .    assert( nFi
1e620 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70  eld>0 );.    r.p
1e630 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1e640 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1e650 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
1e660 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  ld;..    /* The 
1e670 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64  next line of cod
1e680 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f  e computes as fo
1e690 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74  llows, only fast
1e6a0 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28  er:.    **   if(
1e6b0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc==OP_SeekGT |
1e6c0 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
1e6d0 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  ){.    **     r.
1e6e0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
1e6f0 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
1e700 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1e710 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20  fault_rc = +1;. 
1e720 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
1e730 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
1e740 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20  c = ((1 & (oc - 
1e750 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31  OP_SeekLT)) ? -1
1e760 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65   : +1);.    asse
1e770 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1e780 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1e790 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
1e7a0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1e7b0 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LE || r.default_
1e7c0 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1e7d0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1e7e0 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGE || r.default
1e7f0 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61  _rc==+1 );.    a
1e800 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1e810 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLT || r.defaul
1e820 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20  t_rc==+1 );..   
1e830 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
1e840 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
1e850 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1e860 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1e870 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1e880 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1e890 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1e8a0 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1e8b0 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1e8c0 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d  .aMem);.    rc =
1e8d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1e8e0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1e8f0 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
1e900 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1e910 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1e920 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1e930 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e940 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
1e950 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1e960 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1e970 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1e980 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
1e990 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
1e9a0 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
1e9b0 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ++;.#endif.  if(
1e9c0 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29   oc>=OP_SeekGE )
1e9d0 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1e9e0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d  P_SeekGE || oc==
1e9f0 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20  OP_SeekGT );.   
1ea00 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
1ea10 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1ea20 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20  SeekGT) ){.     
1ea30 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1ea40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ea50 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72 73 6f  eNext(pC->pCurso
1ea60 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
1ea70 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1ea80 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
1ea90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1eaa0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
1eab0 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
1eac0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
1ead0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc==OP_SeekLT 
1eae0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1eaf0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e   );.    if( res>
1eb00 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
1eb10 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29  oc==OP_SeekLT) )
1eb20 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
1eb30 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1eb40 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
1eb50 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1eb60 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1eb70 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1eb80 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1eb90 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
1eba0 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20  e{.      /* res 
1ebb0 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
1ebc0 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
1ebd0 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
1ebe0 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a  heck to.      **
1ebf0 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1ec00 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1ec10 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73  */.      res = s
1ec20 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
1ec30 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  C->pCursor);.   
1ec40 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28   }.  }.  assert(
1ec50 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
1ec60 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1ec70 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
1ec80 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f   res ){.    goto
1ec90 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
1eca0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1ecb0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
1ecc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1ecd0 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b  psis:  intkey=r[
1ece0 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P2].**.** P1 is 
1ecf0 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75  an open table cu
1ed00 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61  rsor and P2 is a
1ed10 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20   rowid integer. 
1ed20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20   Arrange.** for 
1ed30 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68  P1 to move so th
1ed40 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1ed50 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20  the rowid given 
1ed60 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  by P2..**.** Thi
1ed70 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  s is actually a 
1ed80 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
1ed90 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
1eda0 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
1edb0 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
1edc0 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
1edd0 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
1ede0 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
1edf0 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
1ee00 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
1ee10 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ns..*/.case OP_S
1ee20 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32  eek: {    /* in2
1ee30 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1ee40 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
1ee50 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ee60 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1ee70 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1ee80 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ee90 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1eea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1eeb0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1eec0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1eed0 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  ble );.  pC->nul
1eee0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32  lRow = 0;.  pIn2
1eef0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
1ef00 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  ];.  pC->movetoT
1ef10 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56  arget = sqlite3V
1ef20 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
1ef30 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
1ef40 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 62  dMoveto = 1;.  b
1ef50 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
1ef60 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
1ef70 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1ef80 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1ef90 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1efa0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1efb0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1efc0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1efd0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1efe0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1eff0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1f000 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1f010 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1f020 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1f030 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
1f040 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1f050 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1f060 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1f070 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1f080 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
1f090 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
1f0a0 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
1f0b0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
1f0c0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
1f0d0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
1f0e0 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
1f0f0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
1f100 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
1f110 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
1f120 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
1f130 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  n be.** advanced
1f140 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20   in the forward 
1f150 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  direction.  The 
1f160 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
1f170 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62   will work,.** b
1f180 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20  ut not the Prev 
1f190 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1f1a0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1f1b0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
1f1c0 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
1f1d0 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
1f1e0 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
1f1f0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1f200 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1f210 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1f220 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1f230 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1f240 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1f250 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1f260 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1f270 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1f280 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1f290 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1f2a0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1f2b0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1f2c0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1f2d0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1f2e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1f2f0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1f300 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
1f310 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
1f320 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
1f330 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
1f340 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
1f350 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
1f360 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
1f370 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
1f380 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
1f390 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
1f3a0 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
1f3b0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
1f3c0 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
1f3d0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
1f3e0 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
1f3f0 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
1f400 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
1f410 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
1f420 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
1f430 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
1f440 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
1f450 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
1f460 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1f470 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
1f480 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
1f490 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
1f4a0 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
1f4b0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1f4c0 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
1f4d0 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
1f4e0 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
1f4f0 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
1f500 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1f510 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1f520 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1f530 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1f540 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1f550 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1f560 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1f570 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1f580 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1f590 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1f5a0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1f5b0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1f5c0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1f5d0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1f5e0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1f5f0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1f600 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
1f610 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
1f620 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
1f630 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1f640 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
1f650 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
1f660 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
1f670 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
1f680 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
1f690 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
1f6a0 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
1f6b0 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
1f6c0 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
1f6d0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
1f6e0 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
1f6f0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1f700 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
1f710 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
1f720 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
1f730 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
1f740 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
1f750 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
1f760 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1f770 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
1f780 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
1f790 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
1f7a0 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
1f7b0 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
1f7c0 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
1f7d0 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
1f7e0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
1f7f0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
1f800 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
1f810 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
1f820 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
1f830 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1f840 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
1f850 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
1f860 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
1f870 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
1f880 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
1f890 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
1f8a0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
1f8b0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f  so: NotFound, Fo
1f8c0 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  und, NotExists.*
1f8d0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66  /.case OP_NoConf
1f8e0 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d  lict:     /* jum
1f8f0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f900 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
1f910 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f920 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
1f930 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
1f940 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
1f950 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
1f960 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20   int takeJump;. 
1f970 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43   int ii;.  VdbeC
1f980 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
1f990 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46   res;.  char *pF
1f9a0 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
1f9b0 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
1f9c0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1f9d0 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
1f9e0 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
1f9f0 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
1fa00 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
1fa10 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *4 + 7];..#ifdef
1fa20 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
1fa30 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  f( pOp->opcode!=
1fa40 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20  OP_NoConflict ) 
1fa50 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
1fa60 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
1fa70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1fa80 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1fa90 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1faa0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1fab0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1fac0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1fad0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1fae0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
1faf0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1fb00 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
1fb10 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
1fb20 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  dif.  pIn3 = &aM
1fb30 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
1fb40 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1fb50 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
1fb60 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
1fb70 30 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30  0 );.  pFree = 0
1fb80 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
1fb90 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
1fba0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1fbb0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1fbc0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
1fbd0 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
1fbe0 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28  = pIn3;.    for(
1fbf0 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c  ii=0; ii<r.nFiel
1fc00 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
1fc10 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1fc20 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20  id(&r.aMem[ii]) 
1fc30 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42  );.      ExpandB
1fc40 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lob(&r.aMem[ii])
1fc50 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1fc60 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28 20  DEBUG.      if( 
1fc70 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52  ii ) REGISTER_TR
1fc80 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20  ACE(pOp->p3+ii, 
1fc90 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65  &r.aMem[ii]);.#e
1fca0 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70  ndif.    }.    p
1fcb0 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d  IdxKey = &r;.  }
1fcc0 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65  else{.    pIdxKe
1fcd0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
1fce0 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
1fcf0 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  rd(.        pC->
1fd00 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52  pKeyInfo, aTempR
1fd10 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70  ec, sizeof(aTemp
1fd20 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20  Rec), &pFree.   
1fd30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78   );.    if( pIdx
1fd40 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Key==0 ) goto no
1fd50 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
1fd60 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
1fd70 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
1fd80 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
1fd90 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1fda0 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
1fdb0 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
1fdc0 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49  ->n, pIn3->z, pI
1fdd0 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49  dxKey);.  }.  pI
1fde0 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72  dxKey->default_r
1fdf0 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d  c = 0;.  takeJum
1fe00 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  p = 0;.  if( pOp
1fe10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43  ->opcode==OP_NoC
1fe20 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f  onflict ){.    /
1fe30 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43  * For the OP_NoC
1fe40 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20  onflict opcode, 
1fe50 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
1fe60 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20   any of the.    
1fe70 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20  ** input fields 
1fe80 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20  are NULL, since 
1fe90 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e  any key with a N
1fea0 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20  ULL will not.   
1feb0 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a   ** conflict */.
1fec0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
1fed0 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64  <pIdxKey->nField
1fee0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ; ii++){.      i
1fef0 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d  f( pIdxKey->aMem
1ff00 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
1ff10 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20  _Null ){.       
1ff20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20   takeJump = 1;. 
1ff30 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1ff40 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
1ff50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ff60 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1ff70 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70  d(pC->pCursor, p
1ff80 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
1ff90 65 73 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  es);.  sqlite3Db
1ffa0 46 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b  Free(db, pFree);
1ffb0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1ffc0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61  E_OK ){.    brea
1ffd0 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  k;.  }.  pC->see
1ffe0 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
1fff0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
20000 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
20010 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
20020 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
20030 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20040 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
20050 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20060 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
20070 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
20080 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
20090 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
200a0 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
200b0 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
200c0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
200d0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
200e0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
200f0 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61  aken(takeJump||a
20100 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
20110 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65  2);.    if( take
20120 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79  Jump || !already
20130 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
20140 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
20150 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20160 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50  ode: NotExists P
20170 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
20180 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
20190 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
201a0 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
201b0 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
201c0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
201d0 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
201e0 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69  .** keys).  P3 i
201f0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77  s an integer row
20200 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20  id.  If P1 does 
20210 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  not contain a re
20220 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77  cord with.** row
20230 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20  id P3 then jump 
20240 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
20250 32 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 63  2.  If P1 does c
20260 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 0a  ontain a record.
20270 2a 2a 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  ** with rowid P3
20280 20 74 68 65 6e 20 6c 65 61 76 65 20 74 68 65 20   then leave the 
20290 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
202a0 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
202b0 6e 64 20 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75  nd fall.** throu
202c0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
202d0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
202e0 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
202f0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
20300 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
20310 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
20320 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
20330 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
20340 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
20350 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
20360 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
20370 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
20380 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
20390 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
203a0 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
203b0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
203c0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
203d0 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
203e0 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
203f0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
20400 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20410 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
20420 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
20430 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74  case OP_NotExist
20440 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
20450 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
20460 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20470 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
20480 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
20490 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
204a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
204b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
204c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
204d0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
204e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
204f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
20500 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
20510 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
20520 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
20530 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
20540 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
20550 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61   = 0;.#endif.  a
20560 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
20570 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
20580 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
20590 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  eg==0 );.  pCrsr
205a0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
205b0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
205c0 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  =0 );.  res = 0;
205d0 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e  .  iKey = pIn3->
205e0 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  u.i;.  rc = sqli
205f0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
20600 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
20610 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
20620 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  .  pC->movetoTar
20630 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
20640 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
20650 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  e */.  pC->nullR
20660 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
20670 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
20680 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
20690 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
206a0 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
206b0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
206c0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
206d0 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65   = res;.  if( re
206e0 73 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s!=0 ) goto jump
206f0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
20700 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
20710 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
20720 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
20730 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
20740 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
20750 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
20760 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
20770 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
20780 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
20790 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
207a0 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
207b0 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
207c0 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
207d0 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
207e0 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
207f0 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
20800 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
20810 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
20820 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
20830 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20840 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20850 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20860 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
20870 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
20880 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
20890 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
208a0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
208b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
208c0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
208d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
208e0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
208f0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
20900 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
20910 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
20920 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
20930 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
20940 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
20950 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
20960 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
20970 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
20980 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
20990 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
209a0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
209b0 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
209c0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
209d0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
209e0 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
209f0 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
20a00 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
20a10 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
20a20 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
20a30 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
20a40 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
20a50 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
20a60 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
20a70 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
20a80 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
20a90 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
20aa0 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
20ab0 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
20ac0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
20ad0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
20ae0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
20af0 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
20b00 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
20b10 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
20b20 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
20b30 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
20b40 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
20b50 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
20b60 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
20b70 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
20b80 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
20b90 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
20ba0 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
20bb0 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
20bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
20bd0 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20bf0 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
20c00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20c10 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
20c20 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
20c30 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
20c40 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20c60 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
20c70 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
20c80 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20ca0 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
20cb0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
20cc0 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
20cd0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
20ce0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
20cf0 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
20d00 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
20d10 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
20d20 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
20d30 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
20d40 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
20d50 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
20d60 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
20d70 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
20d80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
20d90 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
20da0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
20db0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
20dc0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
20dd0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
20de0 69 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43  if( NEVER(pC->pC
20df0 75 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20  ursor==0) ){.   
20e00 20 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69   /* The zero ini
20e10 74 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76  tialization abov
20e20 65 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73  e is all that is
20e30 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c   needed */.  }el
20e40 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  se{.    /* The n
20e50 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63  ext rowid or rec
20e60 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66  ord number (diff
20e70 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20  erent terms for 
20e80 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20  the same.    ** 
20e90 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e  thing) is obtain
20ea0 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70  ed in a two-step
20eb0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20   algorithm..    
20ec0 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20  **.    ** First 
20ed0 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69  we attempt to fi
20ee0 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  nd the largest e
20ef0 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e  xisting rowid an
20f00 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a  d add one.    **
20f10 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69   to that.  But i
20f20 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  f the largest ex
20f30 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20  isting rowid is 
20f40 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69  already the maxi
20f50 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74  mum.    ** posit
20f60 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20  ive integer, we 
20f70 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72  have to fall thr
20f80 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f  ough to the seco
20f90 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62  nd.    ** probab
20fa0 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68  ilistic algorith
20fb0 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  m.    **.    ** 
20fc0 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72  The second algor
20fd0 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63  ithm is to selec
20fe0 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e  t a rowid at ran
20ff0 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20  dom and see if. 
21000 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79     ** it already
21010 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74   exists in the t
21020 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65  able.  If it doe
21030 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20  s not exist, we 
21040 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63  have.    ** succ
21050 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72  eeded.  If the r
21060 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73  andom rowid does
21070 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63   exist, we selec
21080 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20  t a new one.    
21090 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e  ** and try again
210a0 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65  , up to 100 time
210b0 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  s..    */.    as
210c0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
210d0 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  e );..#ifdef SQL
210e0 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a  ITE_32BIT_ROWID.
210f0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
21100 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a  OWID 0x7fffffff.
21110 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d  #else.    /* Som
21120 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70  e compilers comp
21130 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74  lain about const
21140 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ants of the form
21150 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
21160 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65  fff..    ** Othe
21170 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
21180 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  t 0x7fffffffffff
21190 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f  fffffLL.  The fo
211a0 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65  llowing macro se
211b0 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72  ems.    ** to pr
211c0 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61  ovide the consta
211d0 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20  nt while making 
211e0 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61  all compilers ha
211f0 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20  ppy..    */.#   
21200 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
21210 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29    (i64)( (((u64)
21220 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0x7fffffff)<<32)
21230 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66   | (u64)0xffffff
21240 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ff ).#endif..   
21250 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e   if( !pC->useRan
21260 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
21270 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21280 72 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72  reeLast(pC->pCur
21290 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
212a0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
212b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
212c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
212d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
212e0 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
212f0 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
21300 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
21310 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
21320 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
21330 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
21340 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
21350 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29  d(pC->pCursor) )
21360 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
21370 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
21380 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
21390 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  &v);.        ass
213a0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
213b0 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f  OK );   /* Canno
213c0 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67  t fail following
213d0 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a   BtreeLast() */.
213e0 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
213f0 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
21400 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
21410 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
21420 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
21430 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
21440 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
21450 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  987 */.        }
21460 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
21470 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
21480 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
21490 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  T.    if( pOp->p
214a0 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73  3 ){.      /* As
214b0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
214c0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
214d0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ell. */.      as
214e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
214f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
21500 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
21510 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
21520 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
21530 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
21540 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
21550 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  ;.        /* Ass
21560 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
21570 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
21580 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
21590 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
215a0 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a  pFrame->nMem );.
215b0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
215c0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
215d0 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  ->p3];.      }el
215e0 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  se{.        /* A
215f0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
21600 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
21610 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
21620 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
21630 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
21640 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
21650 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
21660 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
21670 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
21680 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  e(p, pMem);.    
21690 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
216a0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65  ( memIsValid(pMe
216b0 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47  m) );..      REG
216c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
216d0 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
216e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
216f0 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
21700 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
21710 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
21720 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
21730 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
21740 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
21750 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
21760 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
21770 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
21780 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  id ){.        rc
21790 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
217a0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37    /* IMP: R-1227
217b0 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20  5-61338 */.     
217c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
217d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
217e0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c    }.      if( v<
217f0 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
21800 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
21810 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
21820 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e  }.      pMem->u.
21830 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e  i = v;.    }.#en
21840 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  dif.    if( pC->
21850 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
21860 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
21870 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
21880 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
21890 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
218a0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
218b0 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
218c0 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
218d0 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
218e0 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
218f0 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
21900 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
21910 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
21920 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
21930 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
21940 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
21950 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
21960 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
21970 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
21980 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
21990 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
219a0 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
219b0 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
219c0 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219e0 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
219f0 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
21a00 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
21a10 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
21a20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
21a30 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
21a40 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20   &v);.        v 
21a50 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
21a60 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75  ); v++;  /* Ensu
21a70 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65  re that v is gre
21a80 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a  ater than zero *
21a90 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  /.      }while( 
21aa0 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42   ((rc = sqlite3B
21ab0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
21ac0 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ed(pC->pCursor, 
21ad0 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
21b10 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
21b20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
21b30 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
21b40 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
21b50 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
21b60 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
21b70 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
21b80 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
21b90 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
21ba0 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
21bb0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
21bc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
21bd0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
21be0 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
21bf0 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
21c00 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
21c10 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21c20 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
21c30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
21c40 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
21c50 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
21c60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
21c70 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
21c80 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
21c90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
21ca0 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
21cb0 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
21cc0 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
21cd0 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
21ce0 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
21cf0 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
21d00 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
21d10 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
21d20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
21d30 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
21d40 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
21d50 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
21d60 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
21d70 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
21d80 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
21d90 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
21da0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
21db0 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
21dc0 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
21dd0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
21de0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
21df0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
21e00 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
21e10 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
21e20 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
21e30 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
21e40 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
21e50 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
21e60 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
21e70 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
21e80 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
21e90 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
21ea0 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
21eb0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
21ec0 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
21ed0 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
21ee0 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
21ef0 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
21f00 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
21f10 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
21f20 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
21f30 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
21f40 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
21f50 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73  tExists) was a s
21f60 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69  uccess, then thi
21f70 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
21f80 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
21f90 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
21fa0 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
21fb0 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
21fc0 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
21fd0 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
21fe0 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
21ff0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
22000 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
22010 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
22020 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
22030 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
22040 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
22050 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
22060 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
22070 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
22080 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
22090 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
220a0 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
220b0 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
220c0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
220d0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
220e0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
220f0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
22100 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
22110 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
22120 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
22130 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
22140 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
22150 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
22160 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
22170 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
22180 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
22190 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
221a0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
221b0 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
221c0 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
221d0 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
221e0 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61  ing the table-na
221f0 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65  me, or.** may be
22200 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
22210 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
22220 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a  he update-hook .
22230 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ** (sqlite3.xUpd
22240 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
22250 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e  invoked followin
22260 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
22270 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
22280 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
22290 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
222a0 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
222b0 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
222c0 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
222d0 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
222e0 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
222f0 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
22300 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
22310 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
22320 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
22330 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
22340 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
22350 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
22360 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
22370 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
22380 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
22390 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
223a0 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
223b0 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
223c0 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
223d0 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
223e0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
223f0 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
22400 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
22410 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
22420 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
22430 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
22440 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
22450 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
22460 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
22470 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
22480 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
22490 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
224a0 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
224b0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
224c0 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
224d0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
224e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
224f0 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
22500 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
22510 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
22520 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
22530 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
22540 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
22550 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
22560 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
22570 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
22580 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
22590 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
225a0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
225b0 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
225c0 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
225d0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
225e0 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
225f0 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
22600 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
22610 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
22620 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
22630 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
22640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22650 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
22660 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
22670 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
22680 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
22690 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
226a0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
226b0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
226c0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
226d0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
226e0 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
226f0 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ook */.  const c
22700 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61  har *zTbl; /* Ta
22710 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ble name - used 
22720 62 79 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f  by the opdate ho
22730 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20  ok */.  int op; 
22740 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
22750 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20 68  ode for update h
22760 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41  ook: SQLITE_UPDA
22770 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53  TE or SQLITE_INS
22780 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ERT */..  pData 
22790 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
227a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
227b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
227c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
227d0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
227e0 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
227f0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22800 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22810 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
22820 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f  sert( pC->pCurso
22830 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
22840 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
22850 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
22860 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22870 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
22880 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
22890 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ata);..  if( pOp
228a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
228b0 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20  ert ){.    pKey 
228c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
228d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
228e0 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ey->flags & MEM_
228f0 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Int );.    asser
22900 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b  t( memIsValid(pK
22910 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  ey) );.    REGIS
22920 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
22930 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b  3, pKey);.    iK
22940 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
22950 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
22960 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
22970 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
22980 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70  ;.    iKey = pOp
22990 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
229a0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
229b0 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
229c0 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
229d0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
229e0 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
229f0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
22a00 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
22a10 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
22a20 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
22a30 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
22a40 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
22a50 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
22a60 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
22a70 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
22a80 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
22a90 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
22aa0 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
22ab0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
22ac0 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
22ad0 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
22ae0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
22af0 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
22b00 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
22b10 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
22b20 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
22b30 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
22b40 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
22b50 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65  >pCursor, 0, iKe
22b60 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61               pDa
22b80 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c  ta->z, pData->n,
22b90 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20   nZero,.        
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46    (pOp->p5 & OPF
22bc0 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20  LAG_APPEND)!=0, 
22bd0 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a  seekResult.  );.
22be0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
22bf0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
22c00 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22c10 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
22c20 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
22c30 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
22c40 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
22c50 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
22c60 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
22c70 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
22c80 29 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  ){.    zDb = db-
22c90 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
22ca0 61 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20  ame;.    zTbl = 
22cb0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f  pOp->p4.z;.    o
22cc0 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
22cd0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
22ce0 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
22cf0 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
22d00 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
22d10 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22d20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
22d30 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
22d40 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a  eArg, op, zDb, z
22d50 54 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20  Tbl, iKey);.    
22d60 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
22d70 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  =0 );.  }.  brea
22d80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22d90 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20   Delete P1 P2 * 
22da0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
22db0 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
22dc0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
22dd0 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
22de0 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
22df0 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
22e00 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
22e10 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
22e20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
22e30 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
22e40 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
22e50 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
22e60 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
22e70 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
22e80 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
22e90 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
22ea0 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
22eb0 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
22ec0 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
22ed0 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
22ee0 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  ext loop..**.** 
22ef0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
22f00 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
22f10 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
22f20 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
22f30 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
22f40 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
22f50 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
22f60 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
22f70 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
22f80 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
22f90 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
22fa0 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
22fb0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
22fc0 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  LL, then it is t
22fd0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
22fe0 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a  able that P1 is.
22ff0 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ** pointing to. 
23000 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   The update hook
23010 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
23020 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
23030 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
23040 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31  NULL then the P1
23050 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
23060 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
23070 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  d.** using OP_No
23080 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
23090 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
230a0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
230b0 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  _Delete: {.  Vdb
230c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
230d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
230e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
230f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
23100 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23110 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23120 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
23130 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
23140 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61  0 );  /* Only va
23150 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62  lid for real tab
23160 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61  les, no pseudota
23170 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
23180 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
23190 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64  veto==0 );..#ifd
231a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
231b0 20 20 2f 2a 20 54 68 65 20 73 65 65 6b 20 6f 70    /* The seek op
231c0 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
231d0 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
231e0 6f 72 20 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44  or prior to OP_D
231f0 65 6c 65 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20  elete will.  ** 
23200 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68  have also set th
23210 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  e pC->movetoTarg
23220 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20  et field to the 
23230 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77  rowid of the row
23240 20 74 68 61 74 0a 20 20 2a 2a 20 69 73 20 62 65   that.  ** is be
23250 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20  ing deleted */. 
23260 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26   if( pOp->p4.z &
23270 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
23280 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20  .    i64 iKey = 
23290 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  0;.    sqlite3Bt
232a0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
232b0 43 75 72 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a  Cursor, &iKey);.
232c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
232d0 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
232e0 65 79 20 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69  ey ); .  }.#endi
232f0 66 0a 20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  f. .  rc = sqlit
23300 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
23310 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  ->pCursor);.  pC
23320 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
23330 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
23340 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
23350 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
23360 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
23370 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
23380 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
23390 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e  back && pOp->p4.
233a0 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65  z && pC->isTable
233b0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   ){.    db->xUpd
233c0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
233d0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
233e0 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20  TE_DELETE,.     
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23400 20 20 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69     db->aDb[pC->i
23410 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e  Db].zName, pOp->
23420 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f  p4.z, pC->moveto
23430 54 61 72 67 65 74 29 3b 0a 20 20 20 20 61 73 73  Target);.    ass
23440 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
23450 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
23460 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
23470 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
23480 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ge++;.  break;.}
23490 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
234a0 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
234b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
234c0 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
234d0 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
234e0 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
234f0 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
23500 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
23510 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
23520 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
23530 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
23540 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
23550 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
23560 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
23570 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
23580 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
23590 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
235a0 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
235b0 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
235c0 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
235d0 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
235e0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
235f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23600 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
23610 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
23620 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b   Synopsis:  if k
23630 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
23640 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
23650 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
23660 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
23670 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
23680 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
23690 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
236a0 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
236b0 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
236c0 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
236d0 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
236e0 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
236f0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
23700 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
23710 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
23720 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
23730 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
23740 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
23750 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
23760 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
23770 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
23780 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
23790 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
237a0 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
237b0 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
237c0 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
237d0 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
237e0 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
237f0 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
23800 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
23810 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
23820 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
23830 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
23840 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
23850 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
23860 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
23870 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
23880 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
23890 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
238a0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
238b0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
238c0 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
238d0 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
238e0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
238f0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23900 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
23910 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23920 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
23930 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23940 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
23950 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
23960 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
23970 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
23980 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
23990 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
239a0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
239b0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
239c0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
239d0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
239e0 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
239f0 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
23a00 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
23a10 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
23a20 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23a30 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23a40 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20   current sorter 
23a50 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20  data for sorter 
23a60 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
23a70 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c  en clear the col
23a80 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65  umn header cache
23a90 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a   on cursor P3..*
23aa0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23ab0 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65   is normally use
23ac0 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72   to move a recor
23ad0 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72  d out of the sor
23ae0 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20  ter and into.** 
23af0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
23b00 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f  is the source fo
23b10 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  r a pseudo-table
23b20 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20   cursor created 
23b30 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65  using.** OpenPse
23b40 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64  udo.  That pseud
23b50 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69  o-table cursor i
23b60 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69  s the one that i
23b70 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a  s identified by.
23b80 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e  ** parameter P3.
23b90 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50    Clearing the P
23ba0 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61  3 column cache a
23bb0 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f  s part of this o
23bc0 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75  pcode saves.** u
23bd0 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f  s from having to
23be0 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74   issue a separat
23bf0 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75  e NullRow instru
23c00 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74  ction to clear t
23c10 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61  hat cache..*/.ca
23c20 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61  se OP_SorterData
23c30 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
23c40 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   *pC;..  pOut = 
23c50 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
23c60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
23c70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23c80 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
23c90 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
23ca0 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b  e3VdbeSorterRowk
23cb0 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20  ey(pC, pOut);.  
23cc0 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49  assert( rc!=SQLI
23cd0 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e  TE_OK || (pOut->
23ce0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
23cf0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
23d00 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23d10 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23d20 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
23d30 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61  p->p3]->cacheSta
23d40 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
23d50 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
23d60 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74  * Opcode: RowDat
23d70 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
23d80 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
23d90 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
23da0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
23db0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
23dc0 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63 75 72  row data for cur
23dd0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65  sor P1..** There
23de0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
23df0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
23e00 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
23e10 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
23e20 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
23e30 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
23e40 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
23e50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
23e60 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
23e70 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70  cursor must be p
23e80 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c  ointing to a val
23e90 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55  id row (not a NU
23ea0 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20  LL row).** of a 
23eb0 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
23ec0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
23ed0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  */./* Opcode: Ro
23ee0 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  wKey P1 P2 * * *
23ef0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
23f00 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72  P2]=key.**.** Wr
23f10 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
23f20 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
23f30 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75  e row key for cu
23f40 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72  rsor P1..** Ther
23f50 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
23f60 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
23f70 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79  ta.  .** The key
23f80 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20   is copied onto 
23f90 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
23fa0 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
23fb0 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
23fc0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
23fd0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
23fe0 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
23ff0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61  pointing to a va
24000 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e  lid row (not a N
24010 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61  ULL row).** of a
24020 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
24030 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
24040 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b  .*/.case OP_RowK
24050 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44  ey:.case OP_RowD
24060 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
24070 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
24080 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33  sor *pCrsr;.  u3
24090 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a  2 n;.  i64 n64;.
240a0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
240b0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
240c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
240d0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74  pOut);..  /* Not
240e0 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e  e that RowKey an
240f0 64 20 52 6f 77 44 61 74 61 20 61 72 65 20 72 65  d RowData are re
24100 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65  ally exactly the
24110 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f   same instructio
24120 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
24130 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24140 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24150 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24160 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
24170 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
24180 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
24190 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
241a0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  || pOp->opcode!=
241b0 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20  OP_RowData );.  
241c0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
241d0 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  ble==0 || pOp->o
241e0 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74  pcode==OP_RowDat
241f0 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
24200 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
24210 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
24220 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24230 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
24240 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
24250 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
24260 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
24270 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  >pCursor;..  /* 
24280 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e  The OP_RowKey an
24290 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63  d OP_RowData opc
242a0 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  odes always foll
242b0 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  ow OP_NotExists 
242c0 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e  or.  ** OP_Rewin
242d0 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e  d/Op_Next with n
242e0 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e  o intervening in
242f0 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20  structions that 
24300 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
24310 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  .  ** the cursor
24320 2e 20 20 49 66 20 74 68 69 73 20 77 68 65 72 65  .  If this where
24330 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f   not the case, o
24340 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n of the followi
24350 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a  ng assert()s.  *
24360 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53  * would fail.  S
24370 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20  hould this ever 
24380 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20  change (because 
24390 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  of changes in th
243a0 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65  e code.  ** gene
243b0 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20  rator) then the 
243c0 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20  fix would be to 
243d0 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f  insert a call to
243e0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
243f0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
24400 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
24410 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24420 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
24430 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
24440 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
24450 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a  sr) );.#if 0  /*
24460 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75   Not required du
24470 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  e to the previou
24480 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74  s to assert() st
24490 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63  atements */.  rc
244a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
244b0 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
244c0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
244d0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
244e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
244f0 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d  endif..  if( pC-
24500 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
24510 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
24520 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
24530 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
24540 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
24550 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
24560 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
24570 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
24580 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
24590 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
245a0 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
245b0 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
245c0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
245d0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
245e0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
245f0 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
24600 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
24610 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
24620 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
24630 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
24640 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
24650 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
24660 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
24670 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
24680 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
24690 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
246a0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
246b0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
246c0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
246d0 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
246e0 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73   n==0 );.  if( s
246f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
24700 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
24710 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a  , MAX(n,32)) ){.
24720 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
24730 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  .  }.  pOut->n =
24740 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65   n;.  MemSetType
24750 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42  Flag(pOut, MEM_B
24760 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  lob);.  if( pC->
24770 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
24780 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24790 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c  reeKey(pCrsr, 0,
247a0 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
247b0 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20  }else{.    rc = 
247c0 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61  sqlite3BtreeData
247d0 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
247e0 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f  ut->z);.  }.  pO
247f0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
24800 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
24810 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
24820 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74  ver cast to text
24830 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58   */.  UPDATE_MAX
24840 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
24850 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
24860 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
24870 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
24880 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
24890 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
248a0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
248b0 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
248c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
248d0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
248e0 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
248f0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
24900 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
24910 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
24920 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
24930 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
24940 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
24950 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
24960 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
24970 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
24980 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
24990 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
249a0 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
249b0 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
249c0 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
249d0 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
249e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
249f0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
24a00 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
24a10 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24a20 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71  C;.  i64 v;.  sq
24a30 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
24a40 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
24a50 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
24a60 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  le;..  pOut = ou
24a70 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
24a80 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
24a90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
24aa0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
24ab0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
24ac0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24ad0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
24ae0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
24af0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
24b00 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   || pC->nullRow 
24b10 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  );.  if( pC->nul
24b20 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74  lRow ){.    pOut
24b30 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
24b40 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ll;.    break;. 
24b50 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64   }else if( pC->d
24b60 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b  eferredMoveto ){
24b70 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76  .    v = pC->mov
24b80 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64  etoTarget;.#ifnd
24b90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
24ba0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65  IRTUALTABLE.  }e
24bb0 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74 61  lse if( pC->pVta
24bc0 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 70  bCursor ){.    p
24bd0 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61 62  Vtab = pC->pVtab
24be0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
24bf0 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
24c00 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
24c10 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
24c20 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
24c30 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
24c40 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43 75  owid(pC->pVtabCu
24c50 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 73  rsor, &v);.    s
24c60 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
24c70 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
24c80 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
24c90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
24ca0 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  ABLE */.  }else{
24cb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
24cc0 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
24cd0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
24ce0 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
24cf0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
24d00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
24d10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
24d20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
24d30 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  ){.      pOut->f
24d40 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
24d50 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
24d60 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
24d70 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
24d80 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
24d90 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
24da0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
24db0 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65   /* Always so be
24dc0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 52  cause of CursorR
24dd0 65 73 74 6f 72 65 28 29 20 61 62 6f 76 65 20 2a  estore() above *
24de0 2f 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  /.  }.  pOut->u.
24df0 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
24e00 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
24e10 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a  llRow P1 * * * *
24e20 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
24e30 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e  cursor P1 to a n
24e40 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50  ull row.  Any OP
24e50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f  _Column operatio
24e60 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72  ns.** that occur
24e70 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f   while the curso
24e80 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c  r is on the null
24e90 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73   row will always
24ea0 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c  .** write a NULL
24eb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
24ec0 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75  lRow: {.  VdbeCu
24ed0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
24ee0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
24ef0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
24f00 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
24f10 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24f20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
24f30 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  =0 );.  pC->null
24f40 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63  Row = 1;.  pC->c
24f50 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24f60 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
24f70 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20  pC->pCursor ){. 
24f80 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
24f90 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70  learCursor(pC->p
24fa0 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
24fb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
24fc0 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50  de: Last P1 P2 P
24fd0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3 * *.**.** The 
24fe0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
24ff0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
25000 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  or Prev instruct
25010 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
25020 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
25030 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
25040 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
25050 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
25060 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
25070 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e  ndex is empty an
25080 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d  d P2>0, then jum
25090 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
250a0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73   P2..** If P2 is
250b0 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62   0 or if the tab
250c0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
250d0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
250e0 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
250f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
25100 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
25110 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
25120 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
25130 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
25140 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
25150 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
25160 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
25170 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
25180 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
25190 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
251a0 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
251b0 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61   not Next..*/.ca
251c0 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
251d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
251e0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
251f0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
25200 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
25210 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25220 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25230 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25240 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25250 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25260 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
25270 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
25280 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
25290 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
252a0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
252b0 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
252c0 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
252d0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
252e0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
252f0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
25300 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
25310 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
25320 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
25330 20 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66   pOp->p3;.#ifdef
25340 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25350 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
25360 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69  Last;.#endif.  i
25370 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a  f( pOp->p2>0 ){.
25380 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
25390 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
253a0 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74     if( res ) got
253b0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
253c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
253d0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
253e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
253f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
25400 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
25410 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
25420 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
25430 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
25440 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
25450 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
25460 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
25470 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
25480 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
25490 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
254a0 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
254b0 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
254c0 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
254d0 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
254e0 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
254f0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
25500 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
25510 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
25520 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
25530 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
25540 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
25550 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
25560 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
25570 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
25580 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
25590 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
255a0 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
255b0 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
255c0 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
255d0 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
255e0 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
255f0 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
25600 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
25610 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
25620 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
25630 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
25640 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
25650 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
25660 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
25670 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
25680 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
25690 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
256a0 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
256b0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
256c0 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
256d0 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
256e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
256f0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
25700 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
25710 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
25720 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
25730 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
25740 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
25750 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
25760 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
25770 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
25780 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
25790 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
257a0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
257b0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
257c0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
257d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
257e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
257f0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
25800 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
25810 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
25820 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
25830 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
25840 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
25850 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
25860 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
25870 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
25880 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
25890 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
258a0 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
258b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
258c0 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
258d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
258e0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
258f0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
25900 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
25910 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25920 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25930 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25940 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25950 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25960 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
25970 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
25980 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
25990 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
259a0 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
259b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
259c0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
259d0 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
259e0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
259f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
25a00 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
25a10 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
25a20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73   }else{.    pCrs
25a30 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
25a40 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
25a50 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
25a60 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
25a70 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
25a80 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
25a90 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
25aa0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
25ab0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
25ac0 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
25ad0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
25ae0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
25af0 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
25b00 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
25b10 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
25b20 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
25b30 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
25b40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25b50 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
25b60 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
25b70 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
25b80 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
25b90 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
25ba0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
25bb0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
25bc0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
25bd0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
25be0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
25bf0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
25c00 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
25c10 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
25c20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
25c30 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
25c40 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
25c50 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
25c60 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
25c70 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
25c80 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
25c90 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
25ca0 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
25cb0 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
25cc0 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
25cd0 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
25ce0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
25cf0 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
25d00 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
25d10 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
25d20 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
25d30 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
25d40 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
25d50 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
25d60 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
25d70 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
25d80 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
25d90 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
25da0 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
25db0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
25dc0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
25dd0 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
25de0 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
25df0 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
25e00 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
25e10 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
25e20 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
25e30 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
25e40 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
25e50 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
25e60 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
25e70 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
25e80 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
25e90 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
25ea0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
25eb0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
25ec0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
25ed0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
25ee0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
25ef0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
25f00 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
25f10 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
25f20 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
25f30 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
25f40 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
25f50 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
25f60 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
25f70 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
25f80 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
25f90 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
25fa0 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
25fb0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
25fc0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
25fd0 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
25fe0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
25ff0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
26000 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
26010 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
26020 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
26030 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
26040 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
26050 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
26060 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
26070 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
26080 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
26090 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
260a0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
260b0 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
260c0 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
260d0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
260e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
260f0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
26100 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
26110 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
26120 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
26130 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
26140 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
26150 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
26160 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
26170 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
26180 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
26190 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
261a0 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
261b0 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
261c0 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
261d0 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
261e0 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
261f0 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
26200 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
26210 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
26220 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
26230 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
26240 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
26250 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
26260 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
26270 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
26280 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
26290 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
262a0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
262b0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
262c0 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
262d0 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
262e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
262f0 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
26300 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
26310 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
26320 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
26330 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
26340 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
26350 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
26360 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
26370 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
26380 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
26390 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
263a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
263b0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
263c0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
263d0 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
263e0 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
263f0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
26400 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
26410 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
26420 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
26430 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
26440 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
26450 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
26460 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
26470 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
26480 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
26490 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
264a0 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
264b0 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
264c0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
264d0 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
264e0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
264f0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
26500 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
26510 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26520 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
26530 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  C) );.  res = 0;
26540 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
26550 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
26560 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67  , pC, &res);.  g
26570 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63  oto next_tail;.c
26580 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65  ase OP_PrevIfOpe
26590 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
265a0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f  .case OP_NextIfO
265b0 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
265c0 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  */.  if( p->apCs
265d0 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20  r[pOp->p1]==0 ) 
265e0 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
265f0 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65   through */.case
26600 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
26610 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
26620 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20  se OP_Next:     
26630 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
26640 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26650 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26660 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26670 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
26680 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
26690 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
266a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
266b0 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d  1];.  res = pOp-
266c0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
266d0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
266e0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
266f0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
26700 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
26710 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65   );.  assert( re
26720 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20  s==0 || (res==1 
26730 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  && pC->isTable==
26740 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  0) );.  testcase
26750 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73  ( res==1 );.  as
26760 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26770 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
26780 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
26790 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
267a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
267b0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
267c0 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
267d0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
267e0 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
267f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26800 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
26810 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
26820 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
26830 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
26840 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
26850 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
26860 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
26870 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
26880 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
26890 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
268a0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
268b0 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
268c0 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
268d0 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
268e0 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
268f0 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
26900 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
26910 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
26920 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26930 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
26940 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
26950 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
26960 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26970 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
26980 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
26990 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
269a0 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
269b0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
269c0 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
269d0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
269e0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
269f0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
26a00 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
26a10 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26a20 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
26a30 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
26a40 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
26a50 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
26a60 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
26a70 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75  xAdvance(pC->pCu
26a80 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
26a90 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
26aa0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26ab0 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
26ac0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
26ad0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d  0,2);.  if( res=
26ae0 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
26af0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
26b00 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
26b10 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
26b20 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
26b30 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
26b40 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
26b50 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
26b60 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
26b70 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
26b80 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
26b90 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f  ow = 1;.  }.  go
26ba0 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
26bb0 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
26bc0 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
26bd0 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
26be0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
26bf0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
26c00 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
26c10 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
26c20 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
26c30 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
26c40 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
26c50 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
26c60 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
26c70 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74  e index P1.  Dat
26c80 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20  a for the entry 
26c90 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33  is nil..**.** P3
26ca0 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20   is a flag that 
26cb0 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20  provides a hint 
26cc0 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
26cd0 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  yer that this.**
26ce0 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
26cf0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
26d00 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
26d10 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
26d20 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
26d30 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
26d40 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
26d50 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
26d60 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
26d70 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
26d80 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
26d90 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
26da0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
26db0 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
26dc0 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
26dd0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
26de0 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68  SULT bit set, th
26df0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75  en the cursor mu
26e00 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20  st have.** just 
26e10 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74  done a seek to t
26e20 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68  he spot where th
26e30 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74  e new entry is t
26e40 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a  o be inserted..*
26e50 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69  * This flag avoi
26e60 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72  ds doing an extr
26e70 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68  a seek..**.** Th
26e80 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
26e90 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e  nly works for in
26ea0 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69  dices.  The equi
26eb0 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
26ec0 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73  on.** for tables
26ed0 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a   is OP_Insert..*
26ee0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
26ef0 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a  Insert:       /*
26f00 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in2 */.case OP_
26f10 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20  IdxInsert: {    
26f20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
26f30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26f40 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
26f50 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  r;.  int nKey;. 
26f60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
26f70 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  y;..  assert( pO
26f80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26f90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26fa0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26fb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26fc0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26fd0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
26fe0 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
26ff0 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
27000 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20  sert) );.  pIn2 
27010 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
27020 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
27030 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
27040 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  ob );.  pCrsr = 
27050 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69  pC->pCursor;.  i
27060 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
27070 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
27080 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
27090 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
270a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
270b0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
270c0 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
270d0 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  pIn2);.  if( rc=
270e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
270f0 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
27100 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  C) ){.      rc =
27110 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
27120 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
27130 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
27140 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d      nKey = pIn2-
27150 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d  >n;.      zKey =
27160 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20   pIn2->z;.      
27170 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
27180 65 49 6e 73 65 72 74 28 70 43 72 73 72 2c 20 7a  eInsert(pCrsr, z
27190 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30  Key, nKey, "", 0
271a0 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20  , 0, pOp->p3, . 
271b0 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e           ((pOp->
271c0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
271d0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
271e0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
271f0 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20  .          );.  
27200 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
27210 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27220 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63  0 );.      pC->c
27230 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
27240 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a  HE_STALE;.    }.
27250 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27260 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
27270 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
27280 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
27290 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
272a0 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
272b0 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
272c0 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
272d0 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
272e0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
272f0 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
27300 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
27310 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
27320 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
27330 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
27340 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
27350 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
27360 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
27370 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
27380 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
27390 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
273a0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
273b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
273c0 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
273d0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
273e0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
273f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27400 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27410 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
27420 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
27430 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
27440 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
27450 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
27460 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
27470 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
27480 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
27490 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
274a0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
274b0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
274c0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65  )pOp->p3;.  r.de
274d0 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
274e0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
274f0 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20  Op->p2];.#ifdef 
27500 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
27510 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
27520 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
27530 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
27540 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
27550 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
27560 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27570 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
27580 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
27590 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  &res);.  if( rc=
275a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65  =SQLITE_OK && re
275b0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
275c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
275d0 65 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a  ete(pCrsr);.  }.
275e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
275f0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
27600 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
27610 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
27620 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
27630 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f  /* Opcode: IdxRo
27640 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
27650 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
27660 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57  2]=rowid.**.** W
27670 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
27680 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
27690 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61   which is the la
276a0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
276b0 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65  record at.** the
276c0 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65   end of the inde
276d0 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f  x key pointed to
276e0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20   by cursor P1.  
276f0 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f  This integer sho
27700 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f  uld be.** the ro
27710 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
27720 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20   entry to which 
27730 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79  this index entry
27740 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53   points..**.** S
27750 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20  ee also: Rowid, 
27760 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63  MakeRecord..*/.c
27770 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
27780 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
27790 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 43  /* out2 */.  BtC
277a0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
277b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
277c0 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20    i64 rowid;..  
277d0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
277e0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
277f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27800 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27810 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27820 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27830 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27840 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
27850 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
27860 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
27870 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  !=0 );.  pOut->f
27880 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
27890 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
278a0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61  sTable==0 );.  a
278b0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
278c0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
278d0 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65  .  /* sqlite3Vbe
278e0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
278f0 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66  can only fail if
27900 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20   the record has 
27910 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a  been deleted.  *
27920 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72  * out from under
27930 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
27940 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61  at will never ha
27950 70 70 65 6e 64 20 66 6f 72 20 61 6e 20 49 64 78  ppend for an Idx
27960 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64  Rowid.  ** opcod
27970 65 2c 20 68 65 6e 63 65 20 74 68 65 20 4e 45 56  e, hence the NEV
27980 45 52 28 29 20 61 72 72 6f 75 6e 64 20 74 68 65  ER() arround the
27990 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 72 65   check of the re
279a0 74 75 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f  turn value..  */
279b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
279c0 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
279d0 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
279e0 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
279f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
27a00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
27a10 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
27a20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30  ){.    rowid = 0
27a30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
27a40 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
27a50 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
27a60 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
27a70 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
27a80 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72  id(db, pCrsr, &r
27a90 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72  owid);.    if( r
27aa0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
27ab0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
27ac0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
27ad0 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
27ae0 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
27af0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
27b00 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65  M_Int;.  }.  bre
27b10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27b20 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
27b30 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
27b40 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
27b50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
27b60 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
27b70 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
27b80 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
27b90 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
27ba0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
27bb0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
27bc0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
27bd0 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
27be0 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
27bf0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
27c00 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
27c10 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
27c20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
27c30 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
27c40 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
27c50 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
27c60 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
27c70 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
27c80 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
27c90 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
27ca0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
27cb0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
27cc0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
27cd0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
27ce0 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
27cf0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
27d00 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
27d10 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
27d20 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
27d30 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
27d40 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
27d50 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
27d60 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
27d70 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
27d80 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
27d90 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
27da0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
27db0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
27dc0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
27dd0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
27de0 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
27df0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
27e00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
27e10 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
27e20 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
27e30 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
27e40 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
27e50 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
27e60 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
27e70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
27e80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
27e90 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
27ea0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
27eb0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
27ec0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
27ed0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
27ee0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
27ef0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
27f00 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
27f10 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
27f20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
27f30 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
27f40 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
27f50 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
27f60 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
27f70 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
27f80 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
27f90 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
27fa0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
27fb0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
27fc0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
27fd0 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
27fe0 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
27ff0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
28000 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
28010 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
28020 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
28030 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
28040 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
28050 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
28060 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
28070 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
28080 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
28090 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
280a0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
280b0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
280c0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
280d0 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
280e0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
280f0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
28100 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
28110 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
28120 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
28130 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
28140 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
28150 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
28160 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
28170 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
28180 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
28190 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
281a0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
281b0 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
281c0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
281d0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
281e0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
281f0 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
28200 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
28210 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
28220 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
28230 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
28240 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
28250 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
28260 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
28270 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
28280 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
28290 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
282a0 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
282b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
282c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
282d0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
282e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
282f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28300 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28310 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
28320 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
28330 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73  Cursor!=0);.  as
28340 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
28350 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
28360 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
28370 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
28380 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
28390 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
283a0 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79  NT32 );.  r.pKey
283b0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
283c0 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
283d0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
283e0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
283f0 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a  ode<OP_IdxLT ){.
28400 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
28410 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
28420 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
28430 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
28440 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
28450 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
28460 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
28470 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
28480 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
28490 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
284a0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
284b0 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d  ;.  }.  r.aMem =
284c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
284d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
284e0 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
284f0 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
28500 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
28510 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
28520 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
28530 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20  ndif.  res = 0; 
28540 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
28550 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
28560 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
28570 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
28580 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
28590 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20  are(db, pC, &r, 
285a0 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
285b0 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28   (OP_IdxLE&1)==(
285c0 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28  OP_IdxLT&1) && (
285d0 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50  OP_IdxGE&1)==(OP
285e0 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69  _IdxGT&1) );.  i
285f0 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26  f( (pOp->opcode&
28600 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
28610 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
28620 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28630 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
28640 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
28650 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73  ;.    res = -res
28660 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
28670 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28680 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
28690 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
286a0 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxGT );.    res
286b0 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  ++;.  }.  VdbeBr
286c0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c  anchTaken(res>0,
286d0 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  2);.  if( res>0 
286e0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
286f0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
28700 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
28710 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
28720 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
28730 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
28740 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
28750 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
28760 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
28770 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
28780 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
28790 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
287a0 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
287b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
287c0 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
287d0 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
287e0 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
287f0 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
28800 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
28810 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
28820 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
28830 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
28840 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
28850 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
28860 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
28870 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
28880 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
28890 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
288a0 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
288b0 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
288c0 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
288d0 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
288e0 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
288f0 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
28900 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
28910 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
28920 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
28930 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
28940 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
28950 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
28960 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
28970 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
28980 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
28990 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
289a0 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
289b0 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
289c0 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
289d0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
289e0 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
289f0 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
28a00 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
28a10 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
28a20 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
28a30 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
28a40 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
28a50 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
28a60 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
28a70 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
28a80 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
28a90 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
28aa0 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
28ab0 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
28ac0 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
28ad0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
28ae0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
28af0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
28b00 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
28b10 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
28b20 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62  M_Null;.  if( db
28b30 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62  ->nVdbeRead > db
28b40 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b  ->nVDestroy+1 ){
28b50 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
28b60 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
28b70 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
28b80 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b  _Abort;.  }else{
28b90 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
28ba0 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
28bb0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
28bc0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
28bd0 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
28be0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
28bf0 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
28c00 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
28c10 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
28c20 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
28c30 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
28c40 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
28c50 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
28c60 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
28c70 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
28c80 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53  Moved;.#ifndef S
28c90 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
28ca0 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63  ACUUM.    if( rc
28cb0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69  ==SQLITE_OK && i
28cc0 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
28cd0 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
28ce0 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
28cf0 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
28d00 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
28d10 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
28d20 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
28d30 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
28d40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
28d50 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
28d60 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
28d70 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
28d80 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
28d90 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
28da0 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
28db0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
28dc0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
28dd0 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
28de0 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
28df0 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
28e00 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28e10 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
28e20 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
28e30 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
28e40 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
28e50 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
28e60 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
28e70 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
28e80 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
28e90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
28ea0 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
28eb0 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
28ec0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
28ed0 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
28ee0 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
28ef0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
28f00 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
28f10 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
28f20 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
28f30 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
28f40 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
28f50 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
28f60 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
28f70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
28f80 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
28f90 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
28fa0 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
28fb0 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
28fc0 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
28fd0 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
28fe0 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
28ff0 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
29000 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
29010 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
29020 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
29030 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
29040 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
29050 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
29060 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
29070 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
29080 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
29090 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
290a0 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
290b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
290c0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
290d0 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
290e0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
290f0 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
29100 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
29110 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68  nChange;. .  nCh
29120 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
29130 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
29140 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29150 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
29160 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32  reeMask, pOp->p2
29170 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
29180 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
29190 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
291a0 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
291b0 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
291c0 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
291d0 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
291e0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
291f0 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
29200 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
29210 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
29220 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
29230 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
29240 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
29250 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
29260 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
29270 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
29280 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
29290 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  e;.    }.  }.  b
292a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
292b0 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
292c0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
292d0 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
292e0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
292f0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
29300 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
29310 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
29320 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
29330 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
29340 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
29350 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
29360 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
29370 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
29380 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
29390 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
293a0 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
293b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
293c0 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
293d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
293e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
293f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
29400 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
29410 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
29420 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65 72   if( pC->pSorter
29430 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
29440 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64  dbeSorterReset(d
29450 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b  b, pC->pSorter);
29460 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
29470 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65  sert( pC->isEphe
29480 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20  meral );.    rc 
29490 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
294a0 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72  earTableOfCursor
294b0 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
294c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
294d0 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
294e0 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20  Table P1 P2 * * 
294f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
29500 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
29510 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
29520 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74  a new table in t
29530 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
29540 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
29550 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
29560 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
29570 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
29580 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
29590 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
295a0 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
295b0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
295c0 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
295d0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
295e0 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64  r P2.**.** The d
295f0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
29600 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e  n a table and an
29610 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20   index is this: 
29620 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a   A table must.**
29630 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69   have a 4-byte i
29640 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63  nteger key and c
29650 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72  an have arbitrar
29660 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65  y data.  An inde
29670 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69  x.** has an arbi
29680 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f  trary key but no
29690 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   data..**.** See
296a0 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64   also: CreateInd
296b0 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ex.*/./* Opcode:
296c0 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20   CreateIndex P1 
296d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
296e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
296f0 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c   iDb=P1.**.** Al
29700 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64  locate a new ind
29710 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ex in the main d
29720 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
29730 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
29740 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  ** auxiliary dat
29750 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
29760 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
29770 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
29780 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74  f.** P1>1.  Writ
29790 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  e the root page 
297a0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
297b0 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20  w table into.** 
297c0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
297d0 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  ** See documenta
297e0 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74  tion on OP_Creat
297f0 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74  eTable for addit
29800 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
29810 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  n..*/.case OP_Cr
29820 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20  eateIndex:      
29830 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
29840 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54  .case OP_CreateT
29850 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
29860 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
29870 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
29880 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
29890 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
298a0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
298b0 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20  ;.  pgno = 0;.  
298c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
298d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
298e0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
298f0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
29900 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
29910 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
29920 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
29930 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
29940 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  >aDb[pOp->p1];. 
29950 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42   assert( pDb->pB
29960 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  t!=0 );.  if( pO
29970 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72  p->opcode==OP_Cr
29980 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20  eateTable ){.   
29990 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45   /* flags = BTRE
299a0 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20  E_INTKEY; */.   
299b0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
299c0 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  NTKEY;.  }else{.
299d0 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
299e0 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20  E_BLOBKEY;.  }. 
299f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
29a00 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
29a10 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66  b->pBt, &pgno, f
29a20 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  lags);.  pOut->u
29a30 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65  .i = pgno;.  bre
29a40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
29a50 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31  : ParseSchema P1
29a60 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
29a70 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61  Read and parse a
29a80 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ll entries from 
29a90 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45  the SQLITE_MASTE
29aa0 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62  R table of datab
29ab0 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d  ase P1.** that m
29ac0 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63  atch the WHERE c
29ad0 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a  lause P4. .**.**
29ae0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
29af0 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20  okes the parser 
29b00 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
29b10 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c  virtual machine,
29b20 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68  .** then runs th
29b30 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  e new virtual ma
29b40 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68  chine.  It is th
29b50 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20  us a re-entrant 
29b60 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
29b70 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20  OP_ParseSchema: 
29b80 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63  {.  int iDb;.  c
29b90 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74  onst char *zMast
29ba0 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  er;.  char *zSql
29bb0 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
29bc0 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79  tData;..  /* Any
29bd0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
29be0 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73  ent that invokes
29bf0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
29c00 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20  l hold mutexes. 
29c10 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72   ** on every btr
29c20 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70  ee.  This is a p
29c30 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20  rerequisite for 
29c40 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73  invoking .  ** s
29c50 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
29c60 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  ck()..  */.#ifde
29c70 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
29c80 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c   for(iDb=0; iDb<
29c90 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
29ca0 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
29cb0 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==1 || sqlite3Bt
29cc0 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
29cd0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
29ce0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
29cf0 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
29d00 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
29d10 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
29d20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48  );.  assert( DbH
29d30 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
29d40 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
29d50 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65  ded) );.  /* Use
29d60 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74  d to be a condit
29d70 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a  ional */ {.    z
29d80 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f  Master = SCHEMA_
29d90 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20  TABLE(iDb);.    
29da0 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62  initData.db = db
29db0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69  ;.    initData.i
29dc0 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
29dd0 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72    initData.pzErr
29de0 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73  Msg = &p->zErrMs
29df0 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  g;.    zSql = sq
29e00 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
29e10 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
29e20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
29e30 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
29e40 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
29e50 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
29e60 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
29e70 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
29e80 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
29e90 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
29ea0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
29eb0 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65  NOMEM;.    }else
29ec0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
29ed0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
29ee0 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e   );.      db->in
29ef0 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20  it.busy = 1;.   
29f00 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d     initData.rc =
29f10 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
29f20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
29f30 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
29f40 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
29f50 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c  3_exec(db, zSql,
29f60 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
29f70 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c  back, &initData,
29f80 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
29f90 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72  c==SQLITE_OK ) r
29fa0 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b  c = initData.rc;
29fb0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
29fc0 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  Free(db, zSql);.
29fd0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
29fe0 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
29ff0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71   }.  if( rc ) sq
2a000 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
2a010 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
2a020 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  (db);.  if( rc==
2a030 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
2a040 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2a050 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
2a060 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
2a070 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
2a080 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
2a090 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
2a0a0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
2a0b0 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
2a0c0 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
2a0d0 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
2a0e0 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
2a0f0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
2a100 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
2a110 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
2a120 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
2a130 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
2a140 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
2a150 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
2a160 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
2a170 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
2a180 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
2a190 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
2a1a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2a1b0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
2a1c0 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
2a1d0 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
2a1e0 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20  >p1);.  break;  
2a1f0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
2a200 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a210 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
2a220 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
2a230 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
2a240 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2a250 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2a260 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2a270 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2a280 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
2a290 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2a2a0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2a2b0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2a2c0 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
2a2d0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2a2e0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2a2f0 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2a300 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2a310 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2a320 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2a330 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2a340 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2a350 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2a360 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
2a370 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  le: {.  sqlite3U
2a380 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
2a390 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ble(db, pOp->p1,
2a3a0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2a3b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a3c0 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31  de: DropIndex P1
2a3d0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2a3e0 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72  Remove the inter
2a3f0 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20  nal (in-memory) 
2a400 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
2a410 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a  that describe.**
2a420 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64   the index named
2a430 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2a440 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2a450 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64  led after an ind
2a460 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  ex.** is dropped
2a470 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2a480 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2a490 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65  code).** in orde
2a4a0 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e  r to keep the in
2a4b0 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2a4c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2a4d0 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2a4e0 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2a4f0 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2a500 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a  OP_DropIndex: {.
2a510 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
2a520 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62  ndDeleteIndex(db
2a530 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2a540 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2a550 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
2a560 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a  opTrigger P1 * *
2a570 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2a580 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2a590 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2a5a0 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2a5b0 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2a5c0 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50   trigger named P
2a5d0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2a5e0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2a5f0 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65  d after a trigge
2a600 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  r.** is dropped 
2a610 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2a620 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2a630 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f  ode) in order to
2a640 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e   keep .** the in
2a650 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
2a660 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
2a670 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e  schema consisten
2a680 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f  t with what is o
2a690 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20  n disk..*/.case 
2a6a0 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20  OP_DropTrigger: 
2a6b0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2a6c0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
2a6d0 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
2a6e0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2a6f0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
2a700 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
2a710 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
2a720 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
2a730 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  Ck P1 P2 P3 * P5
2a740 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
2a750 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
2a760 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
2a770 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
2a780 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
2a790 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
2a7a0 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
2a7b0 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
2a7c0 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
2a7d0 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
2a7e0 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
2a7f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2a800 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
2a810 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2a820 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
2a830 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
2a840 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
2a850 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
2a860 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
2a870 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
2a880 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
2a890 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
2a8a0 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
2a8b0 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
2a8c0 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
2a8d0 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
2a8e0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
2a8f0 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
2a900 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2a910 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
2a920 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2a930 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   are integer.** 
2a940 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31  stored in reg(P1
2a950 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65  ), reg(P1+1), re
2a960 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54  g(P1+2), ....  T
2a970 68 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c  here are P2 tabl
2a980 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a  es.** total..**.
2a990 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
2a9a0 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
2a9b0 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
2a9c0 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2a9d0 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
2a9e0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2a9f0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
2aa00 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
2aa10 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
2aa20 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
2aa30 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
2aa40 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
2aa50 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
2aa60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2aa70 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
2aa80 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
2aa90 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
2aaa0 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
2aab0 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
2aac0 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
2aad0 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
2aae0 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
2aaf0 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   j;          /* 
2ab00 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
2ab10 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
2ab20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
2ab30 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a  rrors reported *
2ab40 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  /.  char *z;    
2ab50 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
2ab60 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20  he error report 
2ab70 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b  */.  Mem *pnErr;
2ab80 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
2ab90 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f   keeping track o
2aba0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
2abb0 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ng */..  assert(
2abc0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
2abd0 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  nRoot = pOp->
2abe0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52  p2;.  assert( nR
2abf0 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74  oot>0 );.  aRoot
2ac00 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2ac10 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
2ac20 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20  (int)*(nRoot+1) 
2ac30 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d  );.  if( aRoot==
2ac40 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2ac50 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ac60 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2ac70 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2ac80 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72  rsor) );.  pnErr
2ac90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2aca0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
2acb0 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
2acc0 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
2acd0 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
2ace0 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
2acf0 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
2ad00 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2ad10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a  Op->p1];.  for(j
2ad20 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b  =0; j<nRoot; j++
2ad30 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20  ){.    aRoot[j] 
2ad40 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64  = (int)sqlite3Vd
2ad50 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31  beIntValue(&pIn1
2ad60 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f  [j]);.  }.  aRoo
2ad70 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65  t[j] = 0;.  asse
2ad80 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
2ad90 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
2ada0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2adb0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2adc0 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  5) );.  z = sqli
2add0 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
2ade0 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
2adf0 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f  Op->p5].pBt, aRo
2ae00 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20  ot, nRoot,.     
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
2ae30 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45  )pnErr->u.i, &nE
2ae40 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  rr);.  sqlite3Db
2ae50 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b  Free(db, aRoot);
2ae60 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d  .  pnErr->u.i -=
2ae70 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33   nErr;.  sqlite3
2ae80 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2ae90 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
2aea0 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
2aeb0 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
2aec0 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
2aed0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2aee0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
2aef0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2af00 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
2af10 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
2af20 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
2af30 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2af40 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
2af50 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2af60 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
2af70 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2af80 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2af90 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2afa0 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
2afb0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
2afc0 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
2afd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77  * Synopsis:  row
2afe0 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a  set(P1)=r[P2].**
2aff0 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
2b000 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
2b010 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
2b020 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20   into a boolean 
2b030 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e  index.** held in
2b040 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2b050 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
2b060 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
2b070 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
2b080 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2b090 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
2b0a0 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
2b0b0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2b0c0 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
2b0d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2b0e0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
2b0f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2b100 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
2b110 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2b120 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2b130 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2b140 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2b150 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2b160 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2b170 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2b180 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _mem;.  }.  sqli
2b190 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2b1a0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2b1b0 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
2b1c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2b1d0 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
2b1e0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2b1f0 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
2b200 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a  rowset(P1).**.**
2b210 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
2b220 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
2b230 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2b240 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  1 and put that v
2b250 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  alue into.** reg
2b260 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69  ister P3.  Or, i
2b270 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  f boolean index 
2b280 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
2b290 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
2b2a0 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
2b2b0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2b2c0 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
2b2d0 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
2b2e0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
2b2f0 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
2b300 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31  i64 val;..  pIn1
2b310 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b320 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
2b330 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2b340 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  et)==0 .   || sq
2b350 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
2b360 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2b370 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
2b380 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
2b390 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
2b3a0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
2b3b0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2b3c0 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  n1);.    VdbeBra
2b3d0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
2b3e0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2b3f0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2b400 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
2b410 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
2b420 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
2b430 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
2b440 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b450 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73  aken(0,2);.    s
2b460 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2b470 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
2b480 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
2b490 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2b4a0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2b4b0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2b4c0 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
2b4d0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2b4e0 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
2b4f0 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
2b500 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
2b510 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
2b520 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
2b530 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
2b540 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
2b550 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
2b560 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
2b570 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
2b580 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
2b590 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
2b5a0 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
2b5b0 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
2b5c0 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
2b5d0 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
2b5e0 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
2b5f0 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
2b600 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
2b610 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
2b620 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
2b630 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
2b640 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
2b650 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
2b660 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
2b670 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
2b680 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
2b690 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
2b6a0 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
2b6b0 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
2b6c0 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
2b6d0 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
2b6e0 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
2b6f0 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
2b700 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
2b710 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
2b720 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
2b730 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
2b740 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
2b750 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
2b760 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
2b770 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
2b780 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
2b790 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
2b7a0 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
2b7b0 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
2b7c0 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
2b7d0 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
2b7e0 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
2b7f0 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
2b800 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
2b810 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
2b820 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
2b830 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
2b840 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
2b850 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
2b860 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
2b870 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
2b880 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
2b890 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
2b8a0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
2b8b0 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
2b8c0 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
2b8d0 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
2b8e0 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2b8f0 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
2b900 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
2b910 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
2b920 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
2b930 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
2b940 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
2b950 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2b960 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b970 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
2b980 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
2b990 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
2b9a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b9b0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
2b9c0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
2b9d0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
2b9e0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
2b9f0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
2ba00 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2ba10 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
2ba20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
2ba30 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
2ba40 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
2ba50 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
2ba60 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
2ba70 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
2ba80 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
2ba90 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2baa0 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2bab0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2bac0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2bad0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2bae0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2baf0 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2bb00 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
2bb10 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2bb20 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2bb30 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
2bb40 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
2bb50 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
2bb60 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
2bb70 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
2bb80 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65  ->u.pRowSet, iSe
2bb90 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
2bba0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2bbb0 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
2bbc0 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
2bbd0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2bbe0 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65  2;.  }.  if( iSe
2bbf0 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
2bc00 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2bc10 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2bc20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d   pIn3->u.i);.  }
2bc30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2bc40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2bc50 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70  T_TRIGGER../* Op
2bc60 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31  code: Program P1
2bc70 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2bc80 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74  ** Execute the t
2bc90 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70  rigger program p
2bca0 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70  assed as P4 (typ
2bcb0 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29  e P4_SUBPROGRAM)
2bcc0 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74  . .**.** P1 cont
2bcd0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2bce0 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
2bcf0 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
2bd00 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f  s the first memo
2bd10 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61  ry .** cell in a
2bd20 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
2bd30 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65  s used as argume
2bd40 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70  nts to the sub-p
2bd50 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63  rogram. P2 .** c
2bd60 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2bd70 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2bd80 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  f the sub-progra
2bd90 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f  m throws an IGNO
2bda0 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e  RE .** exception
2bdb0 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45   using the RAISE
2bdc0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67  () function. Reg
2bdd0 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
2bde0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a  s the address .*
2bdf0 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  * of a memory ce
2be00 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20  ll in this (the 
2be10 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20  parent) VM that 
2be20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63  is used to alloc
2be30 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  ate the .** memo
2be40 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ry required by t
2be50 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72  he sub-vdbe at r
2be60 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  untime..**.** P4
2be70 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2be80 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69   the VM containi
2be90 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ng the trigger p
2bea0 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  rogram..**.** If
2beb0 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P5 is non-zero,
2bec0 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
2bed0 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69  program invocati
2bee0 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a  on is enabled..*
2bef0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
2bf00 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2bf10 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
2bf20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2bf30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
2bf40 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
2bf50 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2bf60 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2bf80 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
2bf90 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
2bfa0 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2bfb0 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
2bfc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2bfd0 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
2bfe0 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
2bff0 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
2c000 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2c010 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
2c020 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
2c030 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
2c040 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
2c050 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
2c060 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
2c070 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
2c080 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
2c090 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
2c0a0 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
2c0b0 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
2c0c0 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
2c0d0 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
2c0e0 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
2c0f0 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
2c100 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
2c110 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
2c120 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
2c130 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
2c140 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
2c150 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2c160 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2c170 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
2c180 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
2c190 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
2c1a0 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
2c1b0 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
2c1c0 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
2c1d0 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
2c1e0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
2c1f0 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
2c200 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
2c210 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
2c220 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
2c230 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
2c240 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
2c250 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
2c260 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
2c270 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
2c280 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
2c290 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
2c2a0 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
2c2b0 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2c2c0 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
2c2d0 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
2c2e0 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
2c2f0 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
2c300 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
2c310 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
2c320 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
2c330 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
2c340 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
2c350 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
2c360 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
2c370 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
2c380 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
2c390 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
2c3a0 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
2c3b0 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
2c3c0 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
2c3d0 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
2c3e0 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
2c3f0 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
2c400 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
2c410 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
2c420 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
2c430 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
2c440 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
2c450 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2c460 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
2c470 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
2c480 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2c490 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
2c4a0 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
2c4b0 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
2c4c0 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
2c4d0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
2c4e0 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
2c4f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2c500 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
2c510 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2c520 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f  zErrMsg, db, "to
2c530 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
2c540 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
2c550 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  on");.    break;
2c560 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73  .  }..  /* Regis
2c570 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20  ter pRt is used 
2c580 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d  to store the mem
2c590 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20  ory required to 
2c5a0 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20  save the state. 
2c5b0 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65   ** of the curre
2c5c0 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20  nt program, and 
2c5d0 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
2c5e0 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74  red at runtime t
2c5f0 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74  o execute.  ** t
2c600 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
2c610 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67  am. If this trig
2c620 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72  ger has been fir
2c630 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20  ed before, then 
2c640 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72  pRt .  ** is alr
2c650 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  eady allocated. 
2c660 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75  Otherwise, it mu
2c670 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
2c680 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52  d.  */.  if( (pR
2c690 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61  t->flags&MEM_Fra
2c6a0 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  me)==0 ){.    /*
2c6b0 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d   SubProgram.nMem
2c6c0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
2c6d0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2c6e0 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68  cells used by th
2c6f0 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61  e .    ** progra
2c700 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50  m stored in SubP
2c710 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77  rogram.aOp. As w
2c720 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e  ell as these, on
2c730 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
2c740 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64  cell is required
2c750 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
2c760 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
2c770 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a  gram. Set local.
2c780 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20      ** variable 
2c790 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c  nMem (and later,
2c7a0 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c   VdbeFrame.nChil
2c7b0 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61  dMem) to this va
2c7c0 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
2c7d0 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d  nMem = pProgram-
2c7e0 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d  >nMem + pProgram
2c7f0 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79 74  ->nCsr;.    nByt
2c800 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
2c810 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
2c820 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
2c830 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
2c840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2c850 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
2c860 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
2c870 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20  sor *).         
2c880 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2c890 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28  >nOnce * sizeof(
2c8a0 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20  u8);.    pFrame 
2c8b0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
2c8c0 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29  cZero(db, nByte)
2c8d0 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d  ;.    if( !pFram
2c8e0 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  e ){.      goto 
2c8f0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
2c900 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c910 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20  Release(pRt);.  
2c920 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d    pRt->flags = M
2c930 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52  EM_Frame;.    pR
2c940 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46  t->u.pFrame = pF
2c950 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d  rame;..    pFram
2c960 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46  e->v = p;.    pF
2c970 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20  rame->nChildMem 
2c980 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  = nMem;.    pFra
2c990 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20  me->nChildCsr = 
2c9a0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
2c9b0 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d      pFrame->pc =
2c9c0 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
2c9d0 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  );.    pFrame->a
2c9e0 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20  Mem = p->aMem;. 
2c9f0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20     pFrame->nMem 
2ca00 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70  = p->nMem;.    p
2ca10 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70  Frame->apCsr = p
2ca20 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72  ->apCsr;.    pFr
2ca30 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70  ame->nCursor = p
2ca40 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70  ->nCursor;.    p
2ca50 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e  Frame->aOp = p->
2ca60 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  aOp;.    pFrame-
2ca70 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20  >nOp = p->nOp;. 
2ca80 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e     pFrame->token
2ca90 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2caa0 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  en;.    pFrame->
2cab0 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61  aOnceFlag = p->a
2cac0 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46  OnceFlag;.    pF
2cad0 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  rame->nOnceFlag 
2cae0 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a  = p->nOnceFlag;.
2caf0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2cb00 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
2cb10 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d  ATUS.    pFrame-
2cb20 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45  >anExec = p->anE
2cb30 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  xec;.#endif..   
2cb40 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
2cb50 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
2cb60 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
2cb70 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
2cb80 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2cb90 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
2cba0 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
2cbb0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
2cbc0 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
2cbd0 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
2cbe0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2cbf0 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
2cc00 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
2cc10 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2cc20 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
2cc30 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2cc40 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
2cc50 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2cc60 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2cc70 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
2cc80 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28    assert( (int)(
2cc90 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61  pOp - aOp)==pFra
2cca0 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20  me->pc );.  }.. 
2ccb0 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20   p->nFrame++;.  
2ccc0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20  pFrame->pParent 
2ccd0 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
2cce0 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64  Frame->lastRowid
2ccf0 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
2cd00 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
2cd10 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
2cd20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
2cd30 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
2cd40 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65  ge;.  p->nChange
2cd50 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
2cd60 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
2cd70 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26  >aMem = aMem = &
2cd80 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2cd90 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e  ame)[-1];.  p->n
2cda0 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43  Mem = pFrame->nC
2cdb0 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43  hildMem;.  p->nC
2cdc0 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72  ursor = (u16)pFr
2cdd0 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a  ame->nChildCsr;.
2cde0 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64    p->apCsr = (Vd
2cdf0 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65  beCursor **)&aMe
2ce00 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20  m[p->nMem+1];.  
2ce10 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
2ce20 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
2ce30 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
2ce40 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e  m->nOp;.  p->aOn
2ce50 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26  ceFlag = (u8 *)&
2ce60 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72  p->apCsr[p->nCur
2ce70 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65  sor];.  p->nOnce
2ce80 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d  Flag = pProgram-
2ce90 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53  >nOnce;.#ifdef S
2cea0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
2ceb0 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70  T_SCANSTATUS.  p
2cec0 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65  ->anExec = 0;.#e
2ced0 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f  ndif.  pOp = &aO
2cee0 70 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74 28  p[-1];.  memset(
2cef0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c  p->aOnceFlag, 0,
2cf00 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a   p->nOnceFlag);.
2cf10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2cf20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
2cf30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2cf40 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
2cf50 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
2cf60 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
2cf70 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
2cf80 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
2cf90 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
2cfa0 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
2cfb0 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
2cfc0 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
2cfd0 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
2cfe0 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
2cff0 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
2d000 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
2d010 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
2d020 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
2d030 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2d040 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
2d050 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
2d060 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
2d070 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
2d080 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
2d090 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
2d0a0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
2d0b0 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
2d0c0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2d0d0 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
2d0e0 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
2d0f0 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
2d100 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
2d110 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
2d120 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
2d130 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
2d140 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46   out2 */.  VdbeF
2d150 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2d160 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74  Mem *pIn;.  pOut
2d170 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2d180 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72  e(p, pOp);.  pFr
2d190 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
2d1a0 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
2d1b0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
2d1c0 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
2d1d0 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
2d1e0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2d1f0 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
2d200 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
2d210 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
2d220 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2d230 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
2d240 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
2d250 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2d260 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
2d270 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
2d280 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2d290 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31  nopsis: fkctr[P1
2d2a0 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  ]+=P2.**.** Incr
2d2b0 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61  ement a "constra
2d2c0 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20  int counter" by 
2d2d0 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65  P2 (P2 may be ne
2d2e0 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
2d2f0 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73  ve)..** If P1 is
2d300 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64   non-zero, the d
2d310 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2d320 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
2d330 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64  cremented .** (d
2d340 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
2d350 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
2d360 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
2d370 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  P1 is zero, the 
2d380 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  .** statement co
2d390 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
2d3a0 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20  nted (immediate 
2d3b0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
2d3c0 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73  traints)..*/.cas
2d3d0 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20  e OP_FkCounter: 
2d3e0 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67  {.  if( db->flag
2d3f0 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72  s & SQLITE_Defer
2d400 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  FKs ){.    db->n
2d410 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
2d420 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
2d430 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  lse if( pOp->p1 
2d440 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
2d450 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  rredCons += pOp-
2d460 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >p2;.  }else{.  
2d470 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69    p->nFkConstrai
2d480 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  nt += pOp->p2;. 
2d490 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2d4a0 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65  * Opcode: FkIfZe
2d4b0 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
2d4c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66  * Synopsis: if f
2d4d0 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f  kctr[P1]==0 goto
2d4e0 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P2.**.** This o
2d4f0 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
2d500 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2d510 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2d520 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
2d530 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
2d540 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
2d550 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2d560 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2d570 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
2d580 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
2d590 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
2d5a0 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
2d5b0 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
2d5c0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2d5d0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
2d5e0 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
2d5f0 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
2d600 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
2d610 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
2d620 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
2d630 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2d640 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
2d650 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
2d660 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
2d670 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
2d680 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2d690 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
2d6a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
2d6b0 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
2d6c0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
2d6d0 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56  pOp->p1 ){.    V
2d6e0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64  dbeBranchTaken(d
2d6f0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
2d700 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2d710 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
2d720 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  2);.    if( db->
2d730 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
2d740 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2d750 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
2d760 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2d770 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
2d780 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e  BranchTaken(p->n
2d790 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
2d7a0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
2d7b0 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a  ImmCons==0, 2);.
2d7c0 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
2d7d0 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
2d7e0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2d7f0 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ons==0 ) goto ju
2d800 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2d810 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2d820 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2d830 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2d840 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
2d850 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2d860 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
2d870 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
2d880 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2d890 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b  is: r[P1]=max(r[
2d8a0 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a  P1],r[P2]).**.**
2d8b0 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
2d8c0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
2d8d0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
2d8e0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
2d8f0 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
2d900 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
2d910 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
2d920 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
2d930 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
2d940 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
2d950 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
2d960 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2d970 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
2d980 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
2d990 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
2d9a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2d9b0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2d9c0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2d9d0 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2d9e0 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
2d9f0 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
2da00 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
2da10 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
2da20 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
2da30 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46  * in2 */.  VdbeF
2da40 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2da50 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
2da60 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2da70 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2da80 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
2da90 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2daa0 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
2dab0 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2dac0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
2dad0 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
2dae0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
2daf0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2db00 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
2db10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2db20 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
2db30 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2db40 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
2db50 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2db60 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
2db70 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
2db80 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
2db90 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
2dba0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2dbb0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2dbc0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2dbd0 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
2dbe0 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
2dbf0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2dc00 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f  s: if r[P1]>0 go
2dc10 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
2dc20 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2dc30 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2dc40 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2dc50 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2dc60 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
2dc70 20 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e 64 0a   jump to P2 and.
2dc80 2a 2a 20 61 64 64 20 74 68 65 20 6c 69 74 65 72  ** add the liter
2dc90 61 6c 20 76 61 6c 75 65 20 50 33 20 74 6f 20 72  al value P3 to r
2dca0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2dcb0 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c  * If the initial
2dcc0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2dcd0 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2dce0 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a  an 1, then the.*
2dcf0 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61  * value is uncha
2dd00 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  nged and control
2dd10 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20   passes through 
2dd20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2dd30 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2dd40 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
2dd50 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2dd60 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2dd70 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2dd80 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2dd90 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2dda0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ddb0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29   pIn1->u.i>0, 2)
2ddc0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2ddd0 69 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  i>0 ) goto jump_
2dde0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
2ddf0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
2de00 4e 65 67 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Neg P1 P2 P3 * *
2de10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2de20 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31  P1]+=P3, if r[P1
2de30 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ]<0 goto P2.**.*
2de40 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
2de50 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2de60 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65  teger.  Add lite
2de70 72 61 6c 20 50 33 20 74 6f 20 74 68 65 20 76 61  ral P3 to the va
2de80 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  lue in.** regist
2de90 65 72 20 50 31 20 74 68 65 6e 20 69 66 20 74 68  er P1 then if th
2dea0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2deb0 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
2dec0 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  han zero, jump t
2ded0 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f  o P2. .*/.case O
2dee0 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20  P_IfNeg: {      
2def0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2df00 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2df10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2df20 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2df30 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
2df40 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
2df50 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  p3;.  VdbeBranch
2df60 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c  Taken(pIn1->u.i<
2df70 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2df80 31 2d 3e 75 2e 69 3c 30 20 29 20 67 6f 74 6f 20  1->u.i<0 ) goto 
2df90 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
2dfa0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2dfb0 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20  e: IfNotZero P1 
2dfc0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2dfd0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
2dfe0 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2b 3d 50  =0 then r[P1]+=P
2dff0 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3, goto P2.**.**
2e000 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
2e010 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2e020 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f  eger.  If the co
2e030 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
2e040 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
2e050 61 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68  ally nonzero, th
2e060 65 6e 20 61 64 64 20 50 33 20 74 6f 20 50 31 20  en add P3 to P1 
2e070 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  and jump to P2. 
2e080 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
2e090 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  is.** initially 
2e0a0 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75  zero, leave it u
2e0b0 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c  nchanged and fal
2e0c0 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
2e0d0 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a  se OP_IfNotZero:
2e0e0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2e0f0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
2e100 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2e110 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
2e120 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
2e130 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
2e140 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c  Taken(pIn1->u.i<
2e150 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2e160 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70  1->u.i ){.     p
2e170 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
2e180 3e 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a  >p3;.     goto j
2e190 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2e1a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e1b0 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65  code: DecrJumpZe
2e1c0 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
2e1d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28  * Synopsis: if (
2e1e0 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f  --r[P1])==0 goto
2e1f0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
2e200 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20  er P1 must hold 
2e210 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63  an integer.  Dec
2e220 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
2e230 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a   in register P1.
2e240 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
2e250 50 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  P2 if the new va
2e260 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a  lue is exactly z
2e270 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
2e280 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20  DecrJumpZero: { 
2e290 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2e2a0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2e2b0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2e2c0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2e2d0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2e2e0 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20   pIn1->u.i--;.  
2e2f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2e300 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29  pIn1->u.i==0, 2)
2e310 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2e320 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  i==0 ) goto jump
2e330 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2e340 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
2e350 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31 20  JumpZeroIncr P1 
2e360 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2e370 70 73 69 73 3a 20 69 66 20 28 72 5b 50 31 5d 2b  psis: if (r[P1]+
2e380 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32 0a  +)==0 ) goto P2.
2e390 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
2e3a0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2e3b0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2e3c0 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  If register P1 i
2e3d0 73 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 7a  s initially.** z
2e3e0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
2e3f0 6f 20 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e 74  o P2.  Increment
2e400 20 72 65 67 69 73 74 65 72 20 50 31 20 72 65 67   register P1 reg
2e410 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
2e420 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68 65  er or.** not the
2e430 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 0a   jump is taken..
2e440 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 5a  */.case OP_JumpZ
2e450 65 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20 20  eroIncr: {      
2e460 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2e470 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2e480 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2e490 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2e4a0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
2e4b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
2e4c0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
2e4d0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e 69    if( (pIn1->u.i
2e4e0 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ++)==0 ) goto ju
2e4f0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
2e500 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2e510 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
2e520 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2e530 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
2e540 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
2e550 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2e560 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
2e570 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
2e580 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
2e590 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
2e5a0 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
2e5b0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
2e5c0 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72  cDef.** structur
2e5d0 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  e that specifies
2e5e0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
2e5f0 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  Use register.** 
2e600 50 33 20 61 73 20 74 68 65 20 61 63 63 75 6d 75  P3 as the accumu
2e610 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
2e620 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
2e630 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
2e640 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
2e650 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
2e660 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
2e670 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  ep: {.  int n;. 
2e680 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70   int i;.  Mem *p
2e690 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63  Mem;.  Mem *pRec
2e6a0 3b 0a 20 20 4d 65 6d 20 74 3b 0a 20 20 73 71 6c  ;.  Mem t;.  sql
2e6b0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
2e6c0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
2e6d0 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
2e6e0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
2e6f0 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
2e700 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Rec = &aMem[pOp-
2e710 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
2e720 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
2e730 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
2e740 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
2e750 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
2e760 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
2e770 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
2e780 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
2e790 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41  = pRec;.    memA
2e7a0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
2e7b0 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78  pRec);.  }.  ctx
2e7c0 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
2e7d0 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
2e7e0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2e7f0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2e800 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2e810 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65    ctx.pMem = pMe
2e820 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2e830 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  3];.  pMem->n++;
2e840 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2e850 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45  mInit(&t, db, ME
2e860 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 70  M_Null);.  ctx.p
2e870 4f 75 74 20 3d 20 26 74 3b 0a 20 20 63 74 78 2e  Out = &t;.  ctx.
2e880 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63  isError = 0;.  c
2e890 74 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20  tx.pVdbe = p;.  
2e8a0 63 74 78 2e 69 4f 70 20 3d 20 28 69 6e 74 29 28  ctx.iOp = (int)(
2e8b0 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 63 74  pOp - aOp);.  ct
2e8c0 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  x.skipFlag = 0;.
2e8d0 20 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53    (ctx.pFunc->xS
2e8e0 74 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70  tep)(&ctx, n, ap
2e8f0 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  Val); /* IMP: R-
2e900 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
2e910 20 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72   if( ctx.isError
2e920 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53   ){.    sqlite3S
2e930 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2e940 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
2e950 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2e960 78 74 28 26 74 29 29 3b 0a 20 20 20 20 72 63 20  xt(&t));.    rc 
2e970 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
2e980 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69   }.  if( ctx.ski
2e990 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73  pFlag ){.    ass
2e9a0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
2e9b0 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
2e9c0 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d  );.    i = pOp[-
2e9d0 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69  1].p1;.    if( i
2e9e0 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
2e9f0 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2ea00 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 73 71  i], 1);.  }.  sq
2ea10 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2ea20 61 73 65 28 26 74 29 3b 0a 20 20 62 72 65 61 6b  ase(&t);.  break
2ea30 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ea40 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
2ea50 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2ea60 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e  s: accum=r[P1] N
2ea70 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  =P2.**.** Execut
2ea80 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
2ea90 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
2eaa0 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
2eab0 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
2eac0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
2ead0 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
2eae0 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
2eaf0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
2eb00 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
2eb10 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
2eb20 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
2eb30 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
2eb40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2eb50 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
2eb60 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
2eb70 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
2eb80 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
2eb90 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
2eba0 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
2ebb0 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
2ebc0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
2ebd0 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
2ebe0 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
2ebf0 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
2ec00 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
2ec10 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
2ec20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
2ec30 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
2ec40 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
2ec50 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
2ec60 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
2ec70 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
2ec80 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2ec90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2eca0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
2ecb0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2ecc0 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  r) );.  pMem = &
2ecd0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ece0 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
2ecf0 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75  flags & ~(MEM_Nu
2ed00 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20  ll|MEM_Agg))==0 
2ed10 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2ed20 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65  3VdbeMemFinalize
2ed30 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70  (pMem, pOp->p4.p
2ed40 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20  Func);.  if( rc 
2ed50 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2ed60 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2ed70 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2ed80 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2ed90 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20  t(pMem));.  }.  
2eda0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2edb0 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
2edc0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
2edd0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
2ede0 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
2edf0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
2ee00 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
2ee10 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
2ee20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
2ee30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ee40 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
2ee50 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
2ee60 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
2ee70 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
2ee80 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
2ee90 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
2eea0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
2eeb0 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
2eec0 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
2eed0 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
2eee0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
2eef0 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
2ef00 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
2ef10 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
2ef20 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
2ef30 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
2ef40 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
2ef50 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
2ef60 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
2ef70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
2ef80 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
2ef90 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
2efa0 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
2efb0 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
2efc0 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
2efd0 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
2efe0 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
2eff0 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
2f000 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
2f010 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
2f020 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
2f030 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
2f040 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
2f050 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
2f060 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
2f070 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
2f080 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
2f090 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f0b0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
2f0c0 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
2f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0e0 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
2f0f0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f110 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
2f120 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
2f130 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2f140 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
2f150 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
2f160 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
2f170 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2f180 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
2f190 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
2f1a0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
2f1b0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2f1c0 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
2f1d0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2f1e0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
2f1f0 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
2f200 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2f210 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
2f220 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
2f230 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
2f240 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2f250 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
2f260 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
2f270 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
2f280 59 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  Y ){.    rc = SQ
2f290 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65  LITE_OK;.    aRe
2f2a0 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  s[0] = 1;.  }.  
2f2b0 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20  for(i=0, pMem = 
2f2c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20  &aMem[pOp->p3]; 
2f2d0 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b  i<3; i++, pMem++
2f2e0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2f2f0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d  beMemSetInt64(pM
2f300 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d  em, (i64)aRes[i]
2f310 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65  );.  }    .  bre
2f320 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a  ak;.};  .#endif.
2f330 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f340 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f  OMIT_PRAGMA./* O
2f350 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f  pcode: JournalMo
2f360 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
2f370 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
2f380 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2f390 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
2f3a0 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f  P3. P3 must be o
2f3b0 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47  ne of the.** PAG
2f3c0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58  ER_JOURNALMODE_X
2f3d0 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68  XX values. If ch
2f3e0 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74  anging between t
2f3f0 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62  he various rollb
2f400 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65  ack.** modes (de
2f410 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20  lete, truncate, 
2f420 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64  persist, off and
2f430 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69   memory), this i
2f440 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70  s a simple.** op
2f450 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69  eration. No IO i
2f460 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a  s required..**.*
2f470 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e  * If changing in
2f480 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c  to or out of WAL
2f490 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64   mode the proced
2f4a0 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  ure is more comp
2f4b0 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57  licated..**.** W
2f4c0 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f  rite a string co
2f4d0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e  ntaining the fin
2f4e0 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20  al journal-mode 
2f4f0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
2f500 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e  */.case OP_Journ
2f510 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20  alMode: {    /* 
2f520 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20  out2 */.  Btree 
2f530 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pBt;           
2f540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72            /* Btr
2f550 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75  ee to change jou
2f560 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a  rnal mode of */.
2f570 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
2f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f590 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63    /* Pager assoc
2f5a0 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a  iated with pBt *
2f5b0 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20  /.  int eNew;   
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5d0 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e      /* New journ
2f5e0 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74  al mode */.  int
2f5f0 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20   eOld;          
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f610 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20  The old journal 
2f620 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20  mode */.#ifndef 
2f630 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2f640 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
2f650 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20  ilename;        
2f660 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
2f670 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70  abase file for p
2f680 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a  Pager */.#endif.
2f690 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
2f6a0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2f6b0 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e  ;.  eNew = pOp->
2f6c0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e  p3;.  assert( eN
2f6d0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f6e0 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20  LMODE_DELETE .  
2f6f0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2f700 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2f710 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20  TRUNCATE .      
2f720 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2f730 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53  JOURNALMODE_PERS
2f740 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  IST .       || e
2f750 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f760 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20  ALMODE_OFF.     
2f770 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2f780 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
2f790 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ORY.       || eN
2f7a0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f7b0 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20  LMODE_WAL.      
2f7c0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2f7d0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
2f7e0 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Y.  );.  assert(
2f7f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2f800 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2f810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
2f820 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
2f830 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
2f840 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70  Op->p1].pBt;.  p
2f850 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
2f860 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a  treePager(pBt);.
2f870 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33    eOld = sqlite3
2f880 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d  PagerGetJournalM
2f890 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69  ode(pPager);.  i
2f8a0 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  f( eNew==PAGER_J
2f8b0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
2f8c0 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2f8d0 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61    if( !sqlite3Pa
2f8e0 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75  gerOkToChangeJou
2f8f0 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29  rnalMode(pPager)
2f900 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
2f910 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f920 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65  OMIT_WAL.  zFile
2f930 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61  name = sqlite3Pa
2f940 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67  gerFilename(pPag
2f950 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f  er, 1);..  /* Do
2f960 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61   not allow a tra
2f970 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e  nsition to journ
2f980 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20  al_mode=WAL for 
2f990 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
2f9a0 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  in temporary sto
2f9b0 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56  rage or if the V
2f9c0 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  FS does not supp
2f9d0 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72  ort shared memor
2f9e0 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e  y .  */.  if( eN
2f9f0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2fa00 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20  LMODE_WAL.   && 
2fa10 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30  (sqlite3Strlen30
2fa20 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20  (zFilename)==0  
2fa30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70           /* Temp
2fa40 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20   file */.       
2fa50 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  || !sqlite3Pager
2fa60 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61  WalSupported(pPa
2fa70 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68  ger))   /* No sh
2fa80 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70  ared-memory supp
2fa90 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20  ort */.  ){.    
2faa0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
2fab0 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65  ..  if( (eNew!=e
2fac0 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64  Old).   && (eOld
2fad0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2fae0 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d  ODE_WAL || eNew=
2faf0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2fb00 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20  DE_WAL).  ){.   
2fb10 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
2fb20 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62  mmit || db->nVdb
2fb30 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20  eRead>1 ){.     
2fb40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
2fb50 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  OR;.      sqlite
2fb60 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
2fb70 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20  ErrMsg, db, .   
2fb80 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
2fb90 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64  hange %s wal mod
2fba0 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  e from within a 
2fbb0 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20  transaction",.  
2fbc0 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50          (eNew==P
2fbd0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2fbe0 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20  _WAL ? "into" : 
2fbf0 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20  "out of").      
2fc00 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
2fc10 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20      }else{. .   
2fc20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47     if( eOld==PAG
2fc30 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2fc40 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  AL ){.        /*
2fc50 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20   If leaving WAL 
2fc60 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20  mode, close the 
2fc70 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63  log file. If suc
2fc80 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c  cessful, the cal
2fc90 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20  l.        ** to 
2fca0 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20  PagerCloseWal() 
2fcb0 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20  checkpoints and 
2fcc0 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74  deletes the writ
2fcd0 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20  e-ahead-log .   
2fce0 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e       ** file. An
2fcf0 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
2fd00 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c  may still be hel
2fd10 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
2fd20 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20  e file .        
2fd30 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65  ** after a succe
2fd40 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20  ssful return. . 
2fd50 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
2fd60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61    rc = sqlite3Pa
2fd70 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67  gerCloseWal(pPag
2fd80 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  er);.        if(
2fd90 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2fda0 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
2fdb0 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2fdc0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
2fdd0 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  New);.        }.
2fde0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
2fdf0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2fe00 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29  NALMODE_MEMORY )
2fe10 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e  {.        /* Can
2fe20 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64  not transition d
2fe30 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d  irectly from MEM
2fe40 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65  ORY to WAL.  Use
2fe50 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20   mode OFF.      
2fe60 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72    ** as an inter
2fe70 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20  mediate */.     
2fe80 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
2fe90 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2fea0 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52  ager, PAGER_JOUR
2feb0 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20  NALMODE_OFF);.  
2fec0 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
2fed0 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63  * Open a transac
2fee0 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
2fef0 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72  base file. Regar
2ff00 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75  dless of the jou
2ff10 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f  rnal.      ** mo
2ff20 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63  de, this transac
2ff30 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73  tion always uses
2ff40 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
2ff50 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nal..      */.  
2ff60 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
2ff70 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
2ff80 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20  s(pBt)==0 );.   
2ff90 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2ffa0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
2ffb0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2ffc0 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c  eSetVersion(pBt,
2ffd0 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
2ffe0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
2fff0 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d  2 : 1));.      }
30000 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
30010 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
30020 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a  TE_OMIT_WAL */..
30030 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
30040 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
30050 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  eNew = sqlite
30060 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
30070 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
30080 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  w);..  pOut = &a
30090 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
300a0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
300b0 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
300c0 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
300d0 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73  t->z = (char *)s
300e0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
300f0 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70  ename(eNew);.  p
30100 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33  Out->n = sqlite3
30110 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a  Strlen30(pOut->z
30120 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
30130 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20   SQLITE_UTF8;.  
30140 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
30150 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
30160 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
30170 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a  ak;.};.#endif /*
30180 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
30190 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  GMA */..#if !def
301a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
301b0 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
301c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
301d0 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
301e0 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a  de: Vacuum * * *
301f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
30200 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
30210 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63  abase.  This opc
30220 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f  ode will cause o
30230 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20  ther virtual.** 
30240 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63  machines to be c
30250 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20  reated and run. 
30260 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63   It may not be c
30270 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
30280 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69  n.** a transacti
30290 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
302a0 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
302b0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
302c0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
302d0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
302e0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20  >zErrMsg, db);. 
302f0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30300 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
30310 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
30320 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
30330 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
30340 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
30350 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
30360 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
30370 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
30380 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
30390 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
303a0 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
303b0 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
303c0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
303d0 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
303e0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
303f0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
30400 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
30410 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
30420 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
30430 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
30440 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
30450 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
30460 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<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 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
304a0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
304b0 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  y==0 );.  pBt = 
304c0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
304d0 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
304e0 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
304f0 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65  uum(pBt);.  Vdbe
30500 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d  BranchTaken(rc==
30510 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a  SQLITE_DONE,2);.
30520 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
30530 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 72 63 20  _DONE ){.    rc 
30540 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
30550 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
30560 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
30570 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
30580 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
30590 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
305a0 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
305b0 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69  atements to expi
305c0 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70  re.  When an exp
305d0 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
305e0 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73  * is executed us
305f0 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ing sqlite3_step
30600 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65  () it will eithe
30610 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  r automatically.
30620 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73  ** reprepare its
30630 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f  elf (if it was o
30640 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65  riginally create
30650 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
30660 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a  prepare_v2()).**
30670 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c   or it will fail
30680 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48   with SQLITE_SCH
30690 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  EMA..** .** If P
306a0 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
306b0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
306c0 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
306d0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
306e0 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
306f0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
30700 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
30710 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f  t is expired..*/
30720 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
30730 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70   {.  if( !pOp->p
30740 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
30750 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
30760 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
30770 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78  }else{.    p->ex
30780 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
30790 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
307a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
307b0 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f  HARED_CACHE./* O
307c0 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b  pcode: TableLock
307d0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
307e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d  * Synopsis: iDb=
307f0 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65  P1 root=P2 write
30800 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  =P3.**.** Obtain
30810 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
30820 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
30830 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
30840 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
30850 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
30860 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
30870 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
30880 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
30890 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
308a0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
308b0 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
308c0 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
308d0 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
308e0 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
308f0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
30900 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
30910 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
30920 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
30930 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
30940 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
30950 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
30960 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
30970 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
30980 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
30990 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
309a0 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
309b0 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
309c0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
309d0 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
309e0 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
309f0 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
30a00 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
30a10 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
30a20 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
30a30 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
30a40 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
30a50 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
30a60 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
30a70 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
30a80 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
30a90 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
30aa0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
30ab0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
30ac0 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73  , p1) );.    ass
30ad0 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
30ae0 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
30af0 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
30b00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
30b10 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
30b20 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
30b30 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
30b40 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
30b50 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
30b60 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
30b70 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
30b80 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  4.z;.      sqlit
30b90 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
30ba0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61  zErrMsg, db, "da
30bb0 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
30bc0 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
30bd0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
30be0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30bf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
30c00 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66  ED_CACHE */..#if
30c10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30c20 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30c30 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20   Opcode: VBegin 
30c40 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
30c50 20 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69   P4 may be a poi
30c60 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
30c70 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
30c80 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74  e. If so, call t
30c90 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65  he .** xBegin me
30ca0 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61  thod for that ta
30cb0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c  ble..**.** Also,
30cc0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
30cd0 50 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b  P4 is set, check
30ce0 20 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f   that this is no
30cf0 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66  t being called f
30d00 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20  rom.** within a 
30d10 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69  callback to a vi
30d20 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e  rtual table xSyn
30d30 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69  c() method. If i
30d40 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a  t is, the error.
30d50 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20  ** code will be 
30d60 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f  set to SQLITE_LO
30d70 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  CKED..*/.case OP
30d80 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61  _VBegin: {.  VTa
30d90 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56  ble *pVTab;.  pV
30da0 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  Tab = pOp->p4.pV
30db0 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tab;.  rc = sqli
30dc0 74 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c  te3VtabBegin(db,
30dd0 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70   pVTab);.  if( p
30de0 56 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74  VTab ) sqlite3Vt
30df0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
30e00 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b  , pVTab->pVtab);
30e10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
30e20 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
30e30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
30e40 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
30e50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
30e60 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
30e70 43 72 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a  Create P1 P2 * *
30e80 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61   *.**.** P2 is a
30e90 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68   register that h
30ea0 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  olds the name of
30eb0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
30ec0 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a   in database .**
30ed0 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
30ee0 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72  reate method for
30ef0 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
30f00 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a  case OP_VCreate:
30f10 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20   {.  Mem sMem;  
30f20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
30f30 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
30f40 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
30f50 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
30f60 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20  *zTab;  /* Name 
30f70 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  of the virtual t
30f80 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65  able */..  memse
30f90 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
30fa0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65  of(sMem));.  sMe
30fb0 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20  m.db = db;.  /* 
30fc0 42 65 63 61 75 73 65 20 50 32 20 69 73 20 61 6c  Because P2 is al
30fd0 77 61 79 73 20 61 20 73 74 61 74 69 63 20 73 74  ways a static st
30fe0 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f  ring, it is impo
30ff0 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20  ssible for the. 
31000 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
31010 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c  emCopy() to fail
31020 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61   */.  assert( (a
31030 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61  Mem[pOp->p2].fla
31040 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30  gs & MEM_Str)!=0
31050 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61   );.  assert( (a
31060 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61  Mem[pOp->p2].fla
31070 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29  gs & MEM_Static)
31080 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  !=0 );.  rc = sq
31090 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
310a0 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f  (&sMem, &aMem[pO
310b0 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72  p->p2]);.  asser
310c0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
310d0 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f   );.  zTab = (co
310e0 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
310f0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d  3_value_text(&sM
31100 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  em);.  assert( z
31110 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  Tab || db->mallo
31120 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28  cFailed );.  if(
31130 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20   zTab ){.    rc 
31140 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
31150 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
31160 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a  >p1, zTab, &p->z
31170 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73  ErrMsg);.  }.  s
31180 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
31190 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 62  ease(&sMem);.  b
311a0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
311b0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
311c0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
311d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
311e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
311f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74  /* Opcode: VDest
31200 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  roy P1 * * P4 *.
31210 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
31220 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
31230 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
31240 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68  ase P1.  Call th
31250 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  e xDestroy metho
31260 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  d.** of that tab
31270 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
31280 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d  Destroy: {.  db-
31290 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20  >nVDestroy++;.  
312a0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
312b0 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
312c0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
312d0 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  .z);.  db->nVDes
312e0 74 72 6f 79 2d 2d 3b 0a 20 20 62 72 65 61 6b 3b  troy--;.  break;
312f0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
31300 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31310 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
31320 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
31330 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
31340 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a  code: VOpen P1 *
31350 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
31360 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
31370 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
31380 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
31390 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
313a0 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  re..** P1 is a c
313b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54  ursor number.  T
313c0 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73  his opcode opens
313d0 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65   a cursor to the
313e0 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
313f0 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  e and stores tha
31400 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a  t cursor in P1..
31410 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e  */.case OP_VOpen
31420 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
31430 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65   *pCur;.  sqlite
31440 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
31450 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
31460 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
31470 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
31480 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
31490 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  le;..  assert( p
314a0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
314b0 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74   pCur = 0;.  pVt
314c0 61 62 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20  abCursor = 0;.  
314d0 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
314e0 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
314f0 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
31500 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
31510 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
31520 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
31530 45 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ED;.    break;. 
31540 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70   }.  pModule = p
31550 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
31560 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
31570 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 74  Open(pVtab, &pVt
31580 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71 6c  abCursor);.  sql
31590 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
315a0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
315b0 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
315c0 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  =rc ){.    /* In
315d0 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
315e0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
315f0 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70  e class */.    p
31600 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
31610 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20  b = pVtab;..    
31620 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64  /* Initialize vd
31630 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  be cursor object
31640 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61   */.    pCur = a
31650 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
31660 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c   pOp->p1, 0, -1,
31670 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43 75   0);.    if( pCu
31680 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72 2d  r ){.      pCur-
31690 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70  >pVtabCursor = p
316a0 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20 20  VtabCursor;.    
316b0 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b    pVtab->nRef++;
316c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
316d0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61    assert( db->ma
316e0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
316f0 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c      pModule->xCl
31700 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72 29  ose(pVtabCursor)
31710 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  ;.      goto no_
31720 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  mem;.    }.  }. 
31730 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31740 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31750 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
31760 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31770 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
31780 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69  E./* Opcode: VFi
31790 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34  lter P1 P2 P3 P4
317a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
317b0 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61  iplan=r[P3] zpla
317c0 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20  n='P4'.**.** P1 
317d0 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
317e0 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20  ed using VOpen. 
317f0 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73   P2 is an addres
31800 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a  s to jump to if.
31810 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  ** the filtered 
31820 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
31830 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  pty..**.** P4 is
31840 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20   either NULL or 
31850 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61  a string that wa
31860 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  s generated by t
31870 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a  he xBestIndex.**
31880 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
31890 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65  odule.  The inte
318a0 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
318b0 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c  e P4 string is l
318c0 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f  eft.** to the mo
318d0 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
318e0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
318f0 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
31900 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
31910 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  d on the virtual
31920 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64   table specified
31930 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20  .** by P1.  The 
31940 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c  integer query pl
31950 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  an parameter to 
31960 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65  xFilter is store
31970 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
31980 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33   P3. Register P3
31990 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72  +1 stores the ar
319a0 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  gc parameter to 
319b0 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
319c0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68  .** xFilter meth
319d0 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33  od. Registers P3
319e0 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72  +2..P3+1+argc ar
319f0 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64  e the argc.** ad
31a00 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74  ditional paramet
31a10 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61  ers which are pa
31a20 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74  ssed to.** xFilt
31a30 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69  er as argv. Regi
31a40 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65  ster P3+2 become
31a50 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70  s argv[0] when p
31a60 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72  assed to xFilter
31a70 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69  ..**.** A jump i
31a80 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20  s made to P2 if 
31a90 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61  the result set a
31aa0 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77  fter filtering w
31ab0 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a  ould be empty..*
31ac0 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65  /.case OP_VFilte
31ad0 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  r: {   /* jump *
31ae0 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20  /.  int nArg;.  
31af0 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f  int iQuery;.  co
31b00 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
31b10 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
31b20 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65  em *pQuery;.  Me
31b30 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69  m *pArgc;.  sqli
31b40 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
31b50 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
31b60 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
31b70 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
31b80 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
31b90 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
31ba0 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
31bb0 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
31bc0 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
31bd0 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
31be0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
31bf0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
31c00 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
31c10 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
31c20 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
31c30 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
31c40 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
31c50 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56  abCursor );.  pV
31c60 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72  tabCursor = pCur
31c70 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20  ->pVtabCursor;. 
31c80 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43 75   pVtab = pVtabCu
31c90 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
31ca0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
31cb0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
31cc0 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
31cd0 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
31ce0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
31cf0 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
31d00 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
31d10 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
31d20 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
31d30 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
31d40 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
31d50 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
31d60 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
31d70 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
31d80 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30  hod */.  res = 0
31d90 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61  ;.  apArg = p->a
31da0 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20  pArg;.  for(i = 
31db0 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
31dc0 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20  .    apArg[i] = 
31dd0 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d  &pArgc[i+1];.  }
31de0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
31df0 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43 75  >xFilter(pVtabCu
31e00 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70 4f  rsor, iQuery, pO
31e10 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61  p->p4.z, nArg, a
31e20 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  pArg);.  sqlite3
31e30 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
31e40 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
31e50 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
31e60 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  ){.    res = pMo
31e70 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
31e80 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70  Cursor);.  }.  p
31e90 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
31ea0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
31eb0 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
31ec0 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
31ed0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
31ee0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
31ef0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31f00 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
31f10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31f20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
31f30 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
31f40 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
31f50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
31f60 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a  ]=vcolumn(P2).**
31f70 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
31f80 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
31f90 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
31fa0 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
31fb0 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
31fc0 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
31fd0 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
31fe0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
31ff0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
32000 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
32010 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
32020 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
32030 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
32040 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
32050 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
32060 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
32070 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
32080 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
32090 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
320a0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
320b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
320c0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
320d0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
320e0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
320f0 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
32100 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
32110 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
32120 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
32130 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
32140 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
32150 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
32160 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
32170 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
32180 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
32190 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
321a0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
321b0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
321c0 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
321d0 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
321e0 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
321f0 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
32200 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65  ut = pDest;.  Me
32210 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
32220 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
32230 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
32240 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74  Column(pCur->pVt
32250 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74  abCursor, &sCont
32260 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
32270 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
32280 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
32290 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65  b);.  if( sConte
322a0 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
322b0 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
322c0 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  isError;.  }.  s
322d0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
322e0 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20  Encoding(pDest, 
322f0 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
32300 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
32310 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
32320 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
32330 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
32340 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
32350 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
32360 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
32370 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
32380 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
32390 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
323a0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
323b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
323c0 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
323d0 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32  ode: VNext P1 P2
323e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76   * * *.**.** Adv
323f0 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62  ance virtual tab
32400 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78  le P1 to the nex
32410 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73  t row in its res
32420 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a  ult set and.** j
32430 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
32440 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74  on P2.  Or, if t
32450 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
32460 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20   has reached.** 
32470 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72  the end of its r
32480 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20  esult set, then 
32490 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
324a0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
324b0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
324c0 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a  _VNext: {   /* j
324d0 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ump */.  sqlite3
324e0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
324f0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
32500 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
32510 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65   int res;.  Vdbe
32520 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20  Cursor *pCur;.. 
32530 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72   res = 0;.  pCur
32540 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
32550 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
32560 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
32570 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  r );.  if( pCur-
32580 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
32590 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
325a0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
325b0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
325c0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
325d0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
325e0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
325f0 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
32600 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
32610 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
32620 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
32630 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
32640 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
32650 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
32660 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
32670 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
32680 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
32690 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
326a0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
326b0 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
326c0 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
326d0 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
326e0 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
326f0 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
32700 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
32710 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
32720 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
32730 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
32740 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
32750 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
32760 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64    */.  rc = pMod
32770 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
32780 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  >pVtabCursor);. 
32790 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
327a0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
327b0 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  b);.  if( rc==SQ
327c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
327d0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
327e0 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43 75  of(pCur->pVtabCu
327f0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62  rsor);.  }.  Vdb
32800 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65  eBranchTaken(!re
32810 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73  s,2);.  if( !res
32820 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
32830 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
32840 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67  p to P2 */.    g
32850 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
32860 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
32870 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f  errupt;.  }.  go
32880 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
32890 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
328a0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
328b0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
328c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
328d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
328e0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
328f0 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
32900 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
32910 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
32920 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
32930 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
32940 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
32950 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
32960 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
32970 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
32980 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
32990 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
329a0 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
329b0 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
329c0 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
329d0 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
329e0 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
329f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
32a00 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
32a10 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
32a20 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
32a30 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
32a40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
32a50 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
32a60 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
32a70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
32a80 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
32a90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
32aa0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
32ab0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
32ac0 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
32ad0 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
32ae0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
32af0 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
32b00 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
32b10 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
32b20 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
32b30 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
32b40 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
32b50 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
32b60 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
32b70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
32b80 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
32b90 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
32ba0 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  TF8);.  if( rc==
32bb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
32bc0 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
32bd0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
32be0 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
32bf0 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
32c00 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
32c10 56 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78  Vtab);.    p->ex
32c20 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  pired = 0;.  }. 
32c30 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
32c40 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32c50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32c60 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55  LE./* Opcode: VU
32c70 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50  pdate P1 P2 P3 P
32c80 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
32c90 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a  : data=r[P3@P2].
32ca0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
32cb0 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
32cc0 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
32cd0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
32ce0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
32cf0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
32d00 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
32d10 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74  ding xUpdate met
32d20 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a  hod. P2 values.*
32d30 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73  * are contiguous
32d40 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74   memory cells st
32d50 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20  arting at P3 to 
32d60 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64  pass to the xUpd
32d70 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  ate .** invocati
32d80 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e  on. The value in
32d90 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32   register (P3+P2
32da0 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  -1) corresponds 
32db0 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20  to the .** p2th 
32dc0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61  element of the a
32dd0 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64  rgv array passed
32de0 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a   to xUpdate..**.
32df0 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d  ** The xUpdate m
32e00 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20  ethod will do a 
32e10 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53  DELETE or an INS
32e20 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20  ERT or both..** 
32e30 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d  The argv[0] elem
32e40 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65  ent (which corre
32e50 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79  sponds to memory
32e60 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20   cell P3).** is 
32e70 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72  the rowid of a r
32e80 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49  ow to delete.  I
32e90 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c  f argv[0] is NUL
32ea0 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65  L then no .** de
32eb0 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20  letion occurs.  
32ec0 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d  The argv[1] elem
32ed0 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64  ent is the rowid
32ee0 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20   of the new .** 
32ef0 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62  row.  This can b
32f00 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74  e NULL to have t
32f10 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
32f20 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20   select the new 
32f30 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74  .** rowid for it
32f40 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65  self.  The subse
32f50 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69  quent elements i
32f60 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20  n the array are 
32f70 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f  .** the values o
32f80 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
32f90 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20   new row..**.** 
32fa0 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f  If P2==1 then no
32fb0 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f   insert is perfo
32fc0 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69  rmed.  argv[0] i
32fd0 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a  s the rowid of.*
32fe0 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  * a row to delet
32ff0 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  e..**.** P1 is a
33000 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49   boolean flag. I
33010 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  f it is set to t
33020 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64  rue and the xUpd
33030 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73  ate call.** is s
33040 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20  uccessful, then 
33050 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
33060 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61  ed by sqlite3_la
33070 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
33080 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20  ) .** is set to 
33090 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
330a0 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72   rowid for the r
330b0 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64  ow just inserted
330c0 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68  ..**.** P5 is th
330d0 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20  e error actions 
330e0 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f  (OE_Replace, OE_
330f0 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c  Fail, OE_Ignore,
33100 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c   etc) to.** appl
33110 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66  y in the case of
33120 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61   a constraint fa
33130 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65  ilure on an inse
33140 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f  rt or update..*/
33150 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65  .case OP_VUpdate
33160 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
33170 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
33180 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
33190 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
331a0 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b  t nArg;.  int i;
331b0 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
331c0 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61  rowid;.  Mem **a
331d0 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b  pArg;.  Mem *pX;
331e0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
331f0 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c  >p2==1        ||
33200 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69   pOp->p5==OE_Fai
33210 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  l   || pOp->p5==
33220 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20  OE_Rollback .   
33230 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d      || pOp->p5==
33240 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d  OE_Abort || pOp-
33250 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c  >p5==OE_Ignore |
33260 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  | pOp->p5==OE_Re
33270 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73  place.  );.  ass
33280 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
33290 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d  ==0 );.  pVtab =
332a0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
332b0 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74  pVtab;.  if( pVt
332c0 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70  ab==0 || NEVER(p
332d0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30  Vtab->pModule==0
332e0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
332f0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
33300 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d   break;.  }.  pM
33310 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
33320 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d  Module;.  nArg =
33330 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
33340 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
33350 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  =P4_VTAB );.  if
33360 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65  ( ALWAYS(pModule
33370 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20  ->xUpdate) ){.  
33380 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c    u8 vtabOnConfl
33390 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e  ict = db->vtabOn
333a0 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70  Conflict;.    ap
333b0 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a  Arg = p->apArg;.
333c0 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70      pX = &aMem[p
333d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72  Op->p3];.    for
333e0 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b  (i=0; i<nArg; i+
333f0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
33400 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29  ( memIsValid(pX)
33410 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
33420 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58  utToChange(p, pX
33430 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69  );.      apArg[i
33440 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58  ] = pX;.      pX
33450 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  ++;.    }.    db
33460 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
33470 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20   = pOp->p5;.    
33480 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  rc = pModule->xU
33490 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72  pdate(pVtab, nAr
334a0 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64  g, apArg, &rowid
334b0 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f  );.    db->vtabO
334c0 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62  nConflict = vtab
334d0 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20  OnConflict;.    
334e0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
334f0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
33500 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
33510 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d  QLITE_OK && pOp-
33520 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73  >p1 ){.      ass
33530 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61  ert( nArg>1 && a
33540 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72  pArg[0] && (apAr
33550 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  g[0]->flags&MEM_
33560 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64  Null) );.      d
33570 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
33580 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64  astRowid = rowid
33590 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
335a0 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
335b0 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20  E_CONSTRAINT && 
335c0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62  pOp->p4.pVtab->b
335d0 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20  Constraint ){.  
335e0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d      if( pOp->p5=
335f0 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
33600 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
33610 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73  E_OK;.      }els
33620 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72  e{.        p->er
33630 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f  rorAction = ((pO
33640 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
33650 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20  e) ? OE_Abort : 
33660 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20  pOp->p5);.      
33670 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
33680 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
33690 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
336a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
336b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
336c0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
336d0 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
336e0 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
336f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
33700 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
33710 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
33720 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
33730 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
33740 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
33750 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
33760 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
33770 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
33780 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
33790 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
337a0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
337b0 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
337c0 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d  treeLastPage(db-
337d0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
337e0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  t);.  break;.}.#
337f0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
33800 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
33810 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
33820 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50  code: MaxPgcnt P
33830 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
33840 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65  * Try to set the
33850 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
33860 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65  unt for database
33870 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
33880 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f   in P3..** Do no
33890 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75  t let the maximu
338a0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c  m page count fal
338b0 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72  l below the curr
338c0 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61  ent page count a
338d0 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61  nd.** do not cha
338e0 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nge the maximum 
338f0 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
33900 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a   if P3==0..**.**
33910 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d   Store the maxim
33920 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66  um page count af
33930 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69  ter the change i
33940 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
33950 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63  /.case OP_MaxPgc
33960 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
33970 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e   /* out2 */.  un
33980 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61  signed int newMa
33990 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  x;.  Btree *pBt;
339a0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
339b0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
339c0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
339d0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
339e0 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
339f0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
33a00 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
33a10 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
33a20 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
33a30 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
33a40 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
33a50 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
33a60 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
33a70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
33a80 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
33a90 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
33aa0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
33ab0 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
33ac0 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
33ad0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
33ae0 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
33af0 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
33b00 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
33b10 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
33b20 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
33b30 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
33b40 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
33b50 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
33b60 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
33b70 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
33b80 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
33b90 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
33ba0 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
33bb0 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
33bc0 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
33bd0 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
33be0 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
33bf0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
33c00 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
33c10 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
33c20 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
33c30 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
33c40 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
33c50 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
33c60 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
33c70 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
33c80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
33c90 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20  MIT_TRACE.  if( 
33ca0 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26  db->xTrace.   &&
33cb0 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a   !p->doingRerun.
33cc0 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
33cd0 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
33ce0 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
33cf0 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a  ))!=0.  ){.    z
33d00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78   = sqlite3VdbeEx
33d10 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63  pandSql(p, zTrac
33d20 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61  e);.    db->xTra
33d30 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
33d40 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , z);.    sqlite
33d50 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a  3DbFree(db, z);.
33d60 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
33d70 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
33d80 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f  E.  zTrace = (pO
33d90 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
33da0 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a  4.z : p->zSql);.
33db0 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a    if( zTrace ){.
33dc0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
33dd0 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
33de0 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
33df0 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  f( DbMaskTest(p-
33e00 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d  >btreeMask, i)==
33e10 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
33e20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
33e30 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d  _control(db, db-
33e40 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53  >aDb[i].zName, S
33e50 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43  QLITE_FCNTL_TRAC
33e60 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  E, zTrace);.    
33e70 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
33e80 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
33e90 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66  _TRACE */.#ifdef
33ea0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
33eb0 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
33ec0 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
33ed0 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61  )!=0.   && (zTra
33ee0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
33ef0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
33f00 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
33f10 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
33f20 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
33f30 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
33f40 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
33f50 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
33f60 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
33f70 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a  E_OMIT_TRACE */.
33f80 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
33f90 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
33fa0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
33fb0 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20   Opcode: Noop * 
33fc0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f  * * * *.**.** Do
33fd0 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20   nothing.  This 
33fe0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f  instruction is o
33ff0 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61  ften useful as a
34000 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61   jump.** destina
34010 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54  tion..*/./*.** T
34020 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e  he magic Explain
34030 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79   opcode are only
34040 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65   inserted when e
34050 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68  xplain==2 (which
34060 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68  .** is to say wh
34070 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51  en the EXPLAIN Q
34080 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78  UERY PLAN syntax
34090 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68   is used.).** Th
340a0 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64  is opcode record
340b0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  s information fr
340c0 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  om the optimizer
340d0 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20  .  It is the.** 
340e0 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f  the same as a no
340f0 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  -op.  This opcod
34100 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20  esnever appears 
34110 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f  in a real VM pro
34120 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74  gram..*/.default
34130 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
34140 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f  This is really O
34150 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78  P_Noop and OP_Ex
34160 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72  plain */.  asser
34170 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
34180 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e  OP_Noop || pOp->
34190 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
341a0 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  in );.  break;.}
341b0 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
341c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
341d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
341e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
341f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34200 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66  .** The cases of
34210 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
34220 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73  ement above this
34230 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c   line should all
34240 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20   be indented.** 
34250 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75  by 6 spaces.  Bu
34260 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
34270 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65  6 spaces have be
34280 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d  en removed to im
34290 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61  prove the.** rea
342a0 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20  dability.  From 
342b0 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f  this point on do
342c0 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69  wn, the normal i
342d0 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73  ndentation rules
342e0 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64   are.** restored
342f0 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
34300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
34340 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56  .    }..#ifdef V
34350 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
34360 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64 54  {.      u64 endT
34370 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74  ime = sqlite3Hwt
34380 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28  ime();.      if(
34390 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29   endTime>start )
343a0 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73   pOrigOp->cycles
343b0 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74   += endTime - st
343c0 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69 67  art;.      pOrig
343d0 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d  Op->cnt++;.    }
343e0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
343f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
34400 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
34410 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
34420 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
34430 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
34440 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
34450 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
34460 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
34470 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
34480 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
34490 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
344a0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
344b0 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
344c0 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
344d0 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
344e0 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
344f0 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
34500 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
34510 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
34520 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20 26   pOp>=&aOp[-1] &
34530 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f  & pOp<&aOp[p->nO
34540 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66 20  p-1] );..#ifdef 
34550 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
34560 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
34570 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
34580 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
34590 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72  c!=0 ) printf("r
345a0 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
345b0 20 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e     if( pOrigOp->
345c0 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47  opflags & (OPFLG
345d0 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20  _OUT2) ){.      
345e0 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28    registerTrace(
345f0 70 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61 4d  pOrigOp->p2, &aM
34600 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d 29  em[pOrigOp->p2])
34610 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
34620 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70 66  if( pOrigOp->opf
34630 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
34640 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67  3 ){.        reg
34650 69 73 74 65 72 54 72 61 63 65 28 70 4f 72 69 67  isterTrace(pOrig
34660 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
34670 72 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  rigOp->p3]);.   
34680 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
34690 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
346a0 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
346b0 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
346c0 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
346d0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
346e0 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
346f0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
34700 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
34710 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
34720 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
34730 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
34740 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
34750 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
34760 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
34770 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
34780 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
34790 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
347a0 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
347b0 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
347c0 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
347d0 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
347e0 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
347f0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
34800 20 20 20 20 20 20 20 28 69 6e 74 29 28 70 4f 70         (int)(pOp
34810 20 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71 6c   - aOp), p->zSql
34820 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
34830 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
34840 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
34850 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
34860 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
34870 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
34880 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
34890 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61   if( resetSchema
348a0 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20  OnFault>0 ){.   
348b0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
348c0 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
348d0 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
348e0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
348f0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
34900 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
34910 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
34920 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
34930 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
34940 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
34950 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
34960 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
34970 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
34980 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
34990 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61  tRowid;.  testca
349a0 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b  se( nVmStep>0 );
349b0 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
349c0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
349d0 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e  _VM_STEP] += (in
349e0 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c  t)nVmStep;.  sql
349f0 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29  ite3VdbeLeave(p)
34a00 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  ;.  return rc;..
34a10 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
34a20 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72  e if a string or
34a30 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61   blob larger tha
34a40 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
34a50 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f  GTH.  ** is enco
34a60 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f  untered..  */.to
34a70 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33  o_big:.  sqlite3
34a80 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
34a90 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69  rrMsg, db, "stri
34aa0 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
34ab0 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
34ac0 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
34ad0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
34ae0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
34af0 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
34b00 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
34b10 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
34b20 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
34b30 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
34b40 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
34b50 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d   db, "out of mem
34b60 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  ory");.  rc = SQ
34b70 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f  LITE_NOMEM;.  go
34b80 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
34b90 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
34ba0 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
34bb0 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
34bc0 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
34bd0 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
34be0 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
34bf0 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
34c00 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
34c10 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
34c20 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
34c30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
34c40 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
34c50 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
34c60 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
34c70 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
34c80 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
34c90 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
34ca0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
34cb0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
34cc0 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
34cd0 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
34ce0 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
34cf0 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
34d00 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
34d10 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
34d20 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
34d30 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
34d40 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
34d50 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
34d60 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
34d70 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
34d80 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
34d90 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
34da0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
34db0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
34dc0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
34dd0 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
34de0 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.