/ Hex Artifact Content
Login

Artifact 49e0a224526f4307ab80e9d3a63697b28cf0cb21:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65  orter(x) ((x)->e
1810: 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1820: 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20  _SORTER)../*.** 
1830: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1840: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1850: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1860: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1870: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1880: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1890: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
18a0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18b0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18c0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18d0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18e0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18f0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1900: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1910: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1920: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1930: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1940: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1950: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1960: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1970: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1990: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
19a0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19b0: 75 38 20 65 43 75 72 54 79 70 65 20 20 20 20 20  u8 eCurType     
19c0: 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
19d0: 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19e0: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
19f0: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1a00: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1a10: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1a20: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1a30: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1a40: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1a50: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1a60: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1a70: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1a80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1a90: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1aa0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1ab0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1ac0: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1ad0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1ae0: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1af0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b00: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b10: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b20: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1b30: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1b40: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1b50: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1b60: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1b70: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1b80: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1b90: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ba0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1bb0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1bc0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1bd0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1be0: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1bf0: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c00: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c10: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c20: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1c30: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1c40: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1c50: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1c60: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1c70: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1c80: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1c90: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1ca0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1cb0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1cc0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1cd0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1ce0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1cf0: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d00: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d10: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d20: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1d30: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1d40: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1d50: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1d60: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1d70: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1d80: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1d90: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1da0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1db0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1dc0: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1dd0: 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69 7a        ROUND8(siz
1de0: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29  eof(VdbeCursor))
1df0: 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32 29   + 2*sizeof(u32)
1e00: 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20 20  *nField + .     
1e10: 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54   (eCurType==CURT
1e20: 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69 74 65  YPE_BTREE?sqlite
1e30: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e40: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
1e50: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1e60: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1e70: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1e80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1e90: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ea0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1eb0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1ec0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1ed0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ee0: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
1ef0: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
1f00: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1f10: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1f20: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1f30: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
1f40: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
1f50: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
1f60: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
1f70: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
1f80: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
1f90: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
1fa0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
1fb0: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
1fc0: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
1fd0: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
1fe0: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ff0: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2000: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2010: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2020: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2030: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2040: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
2050: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
2060: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2070: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
2080: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2090: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
20a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
20b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
20c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
20d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
20e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
20f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2100: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2110: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2120: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2130: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2140: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2150: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2160: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2170: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2180: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2190: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
21a0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
21b0: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
21c0: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
21d0: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
21e0: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
21f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2200: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2210: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2220: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2230: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2240: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
2250: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
2260: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
2270: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
2280: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2290: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
22a0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
22b0: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
22c0: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
22d0: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
22e0: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
22f0: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2300: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2310: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2320: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2330: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2340: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
2350: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2360: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
2370: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
2380: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
2390: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23a0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
23b0: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
23c0: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
23d0: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
23e0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
23f0: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2410: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2420: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2430: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2440: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
2450: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2460: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2470: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
2480: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
2490: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
24a0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
24b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
24c0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
24d0: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
24e0: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
24f0: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2500: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2510: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2520: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2530: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2540: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2550: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
2560: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2570: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2580: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2590: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25a0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25b0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
25c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
25d0: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
25e0: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
25f0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2600: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2610: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2620: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2630: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2640: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2650: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
2660: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2670: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2680: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2690: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26a0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26b0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
26c0: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
26d0: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
26e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26f0: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2700: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2710: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2720: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2730: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2740: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
2760: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
2770: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2780: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2790: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27b0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
27c0: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
27d0: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
27e0: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
27f0: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2800: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2810: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2820: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2830: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2840: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2850: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
2860: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
2870: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
2880: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2890: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
28a0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
28b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
28d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
28e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
28f0: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2900: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2920: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2930: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2940: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2960: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2970: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2980: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
29a0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29b0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
29c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
29d0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
29e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
29f0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2a00: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2a10: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2a20: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2a30: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2a40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2a50: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2a60: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2a70: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a80: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a90: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2aa0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2ab0: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2ac0: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2ad0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2ae0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2af0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2b00: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2b10: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2b20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2b30: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2b40: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2b50: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b60: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b70: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b80: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b90: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2ba0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2bb0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2bc0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2bd0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2be0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2bf0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2c00: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2c10: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2c20: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2c30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2c40: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2c50: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c60: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ca0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2cb0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2cc0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2cd0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2ce0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2d10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2d20: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2d40: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2d50: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2d60: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d70: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d80: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d90: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2da0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2db0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2dc0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2de0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2df0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2e00: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e10: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e20: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e30: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e40: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2e60: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2e70: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2e80: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2e90: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ea0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
2eb0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
2ec0: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
2ed0: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
2ee0: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
2ef0: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
2f00: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
2f10: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
2f20: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
2f30: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
2f40: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
2f50: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
2f60: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
2f70: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
2f80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2f90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2fa0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2fb0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2fc0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2fd0: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
2fe0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
2ff0: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3000: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3010: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3020: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3030: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3040: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3050: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3060: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
3070: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
3080: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
3090: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
30a0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
30b0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
30c0: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
30d0: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
30e0: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
30f0: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3100: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3110: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3120: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3130: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3140: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3150: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
3160: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
3170: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
3180: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
3190: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
31c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
31d0: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
31e0: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3200: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3210: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3220: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3230: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3240: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3250: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
3260: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
3270: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3280: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
3290: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
32a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
32b0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
32c0: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
32d0: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
32e0: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
32f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3300: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3310: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3320: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3330: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3340: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3350: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
3360: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
3370: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
3380: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
3390: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
33a0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
33b0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
33c0: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
33d0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
33e0: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3410: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3420: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3430: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3440: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3450: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3460: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3470: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3480: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3490: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
34a0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
34b0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
34c0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
34d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
34e0: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3570: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3580: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3590: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
35a0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
35b0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
35c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
35d0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
35e0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
35f0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3600: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3610: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3620: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3640: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3650: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
3660: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3670: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3680: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3690: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
36a0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
36b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
36c0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
36d0: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
36e0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
36f0: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3700: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3710: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3720: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3760: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3770: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3780: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3790: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
37a0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
37b0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
37c0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
37d0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
37e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
37f0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3800: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3810: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3820: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3830: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3850: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3860: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3870: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3880: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3890: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
38a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
38b0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
38c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
38d0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
38e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
38f0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3900: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3910: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3920: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3930: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3940: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3950: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3960: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3970: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3980: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3990: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
39a0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
39b0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
39c0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
39d0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
39e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
39f0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3a00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3a10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3a20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3a30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3a50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3a80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3a90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3aa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ab0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ac0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3ad0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3ae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3af0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3b00: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3b10: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3b20: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3b30: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3b40: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3b50: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3b60: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3b70: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3b80: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3b90: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3ba0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3bb0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3bc0: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3bd0: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3be0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bf0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3c00: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3c10: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3c20: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3c30: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c40: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3c50: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3c60: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3c80: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3cb0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3cc0: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3cd0: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3cf0: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3d00: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3d10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3d20: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3d40: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3d50: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3d60: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3d70: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3d80: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3d90: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3da0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3db0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
3dc0: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
3dd0: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
3de0: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
3df0: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
3e00: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
3e10: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
3e20: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
3e30: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
3e40: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
3e50: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
3e60: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
3e70: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
3e80: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3e90: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
3ea0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3eb0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
3ec0: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
3ed0: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
3ee0: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
3ef0: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
3f00: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
3f10: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
3f20: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
3f30: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
3f40: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
3f50: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
3f60: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
3f70: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3f80: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
3f90: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
3fa0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
3fb0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
3fc0: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
3fd0: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
3fe0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
3ff0: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4000: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4010: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4020: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4030: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4040: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4050: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
4060: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
4070: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
4080: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
4090: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
40a0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
40b0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
40c0: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
40d0: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
40e0: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
40f0: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4100: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4110: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4120: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4130: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4140: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4150: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
4160: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
4170: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
4180: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
4190: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
41a0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
41b0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
41c0: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
41d0: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
41e0: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
41f0: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4200: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4210: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4220: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4230: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4240: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4250: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
4260: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
4270: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
4280: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
4290: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
42a0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
42b0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
42c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
42d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
42e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
42f0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
4300: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
4310: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
4320: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
4330: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
4340: 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32  .    return out2
4350: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4360: 65 61 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  ear(pOut);.  }el
4370: 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  se{.    pOut->fl
4380: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
4390: 20 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a     return pOut;.
43a0: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78    }.}.../*.** Ex
43b0: 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66  ecute as much of
43c0: 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20   a VDBE program 
43d0: 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68  as we can..** Th
43e0: 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f  is is the core o
43f0: 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  f sqlite3_step()
4400: 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  .  .*/.int sqlit
4410: 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64  e3VdbeExec(.  Vd
4420: 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20  be *p           
4430: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
4440: 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20  VDBE */.){.  Op 
4450: 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20  *aOp = p->aOp;  
4460: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
4470: 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f  of p->aOp */.  O
4480: 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20  p *pOp = aOp;   
4490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
44a0: 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a  rent operation *
44b0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
44c0: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
44d0: 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46  efined(VDBE_PROF
44e0: 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67  ILE).  Op *pOrig
44f0: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4500: 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f    /* Value of pO
4510: 70 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  p at the top of 
4520: 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64  the loop */.#end
4530: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4540: 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78  _DEBUG.  int nEx
4550: 74 72 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20  traDelete = 0;  
4560: 20 20 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20      /* Verifies 
4570: 46 4f 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55  FORDELETE and AU
4580: 58 44 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f  XDELETE flags */
4590: 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63  .#endif.  int rc
45a0: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20   = SQLITE_OK;   
45b0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
45c0: 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c   return */.  sql
45d0: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
45e0: 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64  ;       /* The d
45f0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20  atabase */.  u8 
4600: 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
4610: 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74  lt = 0; /* Reset
4620: 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e   schema after an
4630: 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69   error if positi
4640: 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64  ve */.  u8 encod
4650: 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20  ing = ENC(db);  
4660: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
4670: 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  se encoding */. 
4680: 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20   int iCompare = 
4690: 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  0;          /* R
46a0: 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50  esult of last OP
46b0: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 69  _Compare operati
46c0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
46d0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
46e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
46f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
4700: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
4710: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4720: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4730: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
4740: 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20  essLimit = 0;/* 
4750: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
4760: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
4770: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
4780: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
4790: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
47a0: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
47b0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
47c0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
47d0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
47e0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47f0: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
4800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
4810: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
4820: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
4830: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4840: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
4850: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4860: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4870: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4880: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  operand */.  int
4890: 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20   *aPermute = 0; 
48a0: 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75          /* Permu
48b0: 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e  tation of column
48c0: 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65  s for OP_Compare
48d0: 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f   */.  i64 lastRo
48e0: 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
48f0: 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76  wid;  /* Saved v
4900: 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74  alue of the last
4910: 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f   insert ROWID */
4920: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
4930: 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74  FILE.  u64 start
4940: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4950: 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63    /* CPU clock c
4960: 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66  ount at start of
4970: 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69   opcode */.#endi
4980: 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20  f.  /*** INSERT 
4990: 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45  STACK UNION HERE
49a0: 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28   ***/..  assert(
49b0: 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f   p->magic==VDBE_
49c0: 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a  MAGIC_RUN );  /*
49d0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
49e0: 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f  verifies this */
49f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e  .  sqlite3VdbeEn
4a00: 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d  ter(p);.  if( p-
4a10: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45  >rc==SQLITE_NOME
4a20: 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  M ){.    /* This
4a30: 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61   happens if a ma
4a40: 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20  lloc() inside a 
4a50: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
4a60: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72  column_text() or
4a70: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
4a80: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20  column_text16() 
4a90: 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20  failed.  */.    
4aa0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
4ab0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63  .  assert( p->rc
4ac0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
4ad0: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
4ae0: 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73  ITE_BUSY );.  as
4af0: 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
4b00: 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c  er || p->readOnl
4b10: 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20  y!=0 );.  p->rc 
4b20: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70  = SQLITE_OK;.  p
4b30: 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d  ->iCurrentTime =
4b40: 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
4b50: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20  >explain==0 );. 
4b60: 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d   p->pResultSet =
4b70: 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61   0;.  db->busyHa
4b80: 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b  ndler.nBusy = 0;
4b90: 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73  .  if( db->u1.is
4ba0: 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f  Interrupted ) go
4bb0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
4bc0: 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c  interrupt;.  sql
4bd0: 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
4be0: 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53  ql(p);.#ifndef S
4bf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4c00: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69  ESS_CALLBACK.  i
4c10: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
4c20: 20 29 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69   ){.    u32 iPri
4c30: 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72  or = p->aCounter
4c40: 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
4c50: 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20  US_VM_STEP];.   
4c60: 20 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d   assert( 0 < db-
4c70: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b  >nProgressOps );
4c80: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
4c90: 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72  mit = db->nProgr
4ca0: 65 73 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72  essOps - (iPrior
4cb0: 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   % db->nProgress
4cc0: 4f 70 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Ops);.  }.#endif
4cd0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4ce0: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
4cf0: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
4d00: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
4d10: 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e  0.   && (p->db->
4d20: 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f  flags & (SQLITE_
4d30: 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49  VdbeListing|SQLI
4d40: 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54  TE_VdbeEQP|SQLIT
4d50: 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30  E_VdbeTrace))!=0
4d60: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  .  ){.    int i;
4d70: 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20  .    int once = 
4d80: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  1;.    sqlite3Vd
4d90: 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20  bePrintSql(p);. 
4da0: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
4db0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4dc0: 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20  eListing ){.    
4dd0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
4de0: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
4df0: 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  n");.      for(i
4e00: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4e10: 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  +){.        sqli
4e20: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
4e30: 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69  tdout, i, &aOp[i
4e40: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
4e50: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  }.    if( p->db-
4e60: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4e70: 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20  VdbeEQP ){.     
4e80: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4e90: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4ea0: 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63    if( aOp[i].opc
4eb0: 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
4ec0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
4ed0: 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22   once ) printf("
4ee0: 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a  VDBE Query Plan:
4ef0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
4f00: 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61  printf("%s\n", a
4f10: 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20  Op[i].p4.z);.   
4f20: 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b         once = 0;
4f30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4f40: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4f50: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4f60: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
4f70: 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45   )  printf("VDBE
4f80: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d   Trace:\n");.  }
4f90: 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  .  sqlite3EndBen
4fa0: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e  ignMalloc();.#en
4fb0: 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61  dif.  for(pOp=&a
4fc0: 4f 70 5b 70 2d 3e 70 63 5d 3b 20 72 63 3d 3d 53  Op[p->pc]; rc==S
4fd0: 51 4c 49 54 45 5f 4f 4b 3b 20 70 4f 70 2b 2b 29  QLITE_OK; pOp++)
4fe0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
4ff0: 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61  p>=aOp && pOp<&a
5000: 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 20 20 20  Op[p->nOp]);.   
5010: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
5020: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
5030: 6d 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45  mem;.#ifdef VDBE
5040: 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61  _PROFILE.    sta
5050: 72 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  rt = sqlite3Hwti
5060: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
5070: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64   nVmStep++;.#ifd
5080: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5090: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
50a0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45 78  .    if( p->anEx
50b0: 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28  ec ) p->anExec[(
50c0: 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b  int)(pOp-aOp)]++
50d0: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  ;.#endif..    /*
50e0: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
50f0: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
5100: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
5110: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
5120: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
5130: 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
5140: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
5150: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5160: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
5170: 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  ut, (int)(pOp - 
5180: 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20  aOp), pOp);.    
5190: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
51a0: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
51b0: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
51c0: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
51d0: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
51e0: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
51f0: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
5200: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
5210: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
5220: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
5230: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5240: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
5250: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5260: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5270: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
5280: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5290: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
52a0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
52b0: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
52c0: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
52d0: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
52e0: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
52f0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
5300: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5310: 47 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  G.    assert( pO
5320: 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c 69  p->opflags==sqli
5330: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
5340: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20 29  y[pOp->opcode] )
5350: 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
5360: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5370: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5380: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5390: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
53a0: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
53b0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
53c0: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
53d0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
53e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
53f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
5400: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5410: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
5420: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
5430: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5440: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
5450: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
5460: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5470: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5480: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5490: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
54a0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
54b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
54c0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
54d0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
54e0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
54f0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
5500: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5510: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5520: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
5530: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20  &aMem[pOp->p2]) 
5540: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5550: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
5560: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5570: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5580: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5590: 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b  OPFLG_IN3)!=0 ){
55a0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
55b0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
55c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
55d0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
55e0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
55f0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5600: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5610: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  3]) );.      ass
5620: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
5630: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5640: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  ts(&aMem[pOp->p3
5650: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
5660: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5670: 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
5680: 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  3]);.    }.    i
5690: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
56a0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d   & OPFLG_OUT2)!=
56b0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
56c0: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
56d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
56e0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
56f0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5700: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5710: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
5720: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
5730: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5740: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
5750: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5760: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5770: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5780: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
5790: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
57a0: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
57b0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
57c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
57d0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20     }.#endif.#if 
57e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
57f0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
5800: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
5810: 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70     pOrigOp = pOp
5820: 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20  ;.#endif.  .    
5830: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
5840: 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  ode ){../*******
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5860: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5870: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5880: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5890: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66  ******.** What f
58a0: 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73  ollows is a mass
58b0: 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65  ive switch state
58c0: 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20  ment where each 
58d0: 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  case implements 
58e0: 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e  a.** separate in
58f0: 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65  struction in the
5900: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
5910: 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20  .  If we follow 
5920: 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64  the usual.** ind
5930: 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74  entation convent
5940: 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20  ions, each case 
5950: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
5960: 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ed by 6 spaces. 
5970: 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20   But.** that is 
5980: 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20  a lot of wasted 
5990: 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66  space on the lef
59a0: 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68  t margin.  So th
59b0: 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a  e code within.**
59c0: 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
59d0: 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b  ement will break
59e0: 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e   with convention
59f0: 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65   and be flush-le
5a00: 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62  ft. Another.** b
5a10: 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69  ig comment (simi
5a20: 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29  lar to this one)
5a30: 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70   will mark the p
5a40: 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65  oint in the code
5a50: 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61   where.** we tra
5a60: 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20  nsition back to 
5a70: 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
5a80: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  on..**.** The fo
5a90: 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68  rmatting of each
5aa0: 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61   case is importa
5ab0: 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c  nt.  The makefil
5ac0: 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20  e for SQLite.** 
5ad0: 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20  generates two C 
5ae0: 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68  files "opcodes.h
5af0: 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63  " and "opcodes.c
5b00: 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  " by scanning th
5b10: 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69  is.** file looki
5b20: 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61  ng for lines tha
5b30: 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61  t begin with "ca
5b40: 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70  se OP_".  The op
5b50: 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a  codes.h files.**
5b60: 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20   will be filled 
5b70: 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68  with #defines th
5b80: 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69  at give unique i
5b90: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f  nteger values to
5ba0: 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20   each.** opcode 
5bb0: 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e  and the opcodes.
5bc0: 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64  c file is filled
5bd0: 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f   with an array o
5be0: 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a  f strings where.
5bf0: 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69  ** each string i
5c00: 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e  s the symbolic n
5c10: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72  ame for the corr
5c20: 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65  esponding opcode
5c30: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73  .  If the.** cas
5c40: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66  e statement is f
5c50: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
5c60: 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d  ment of the form
5c70: 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e   "/# same as ...
5c80: 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d   #/".** that com
5c90: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
5ca0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61  determine the pa
5cb0: 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f  rticular value o
5cc0: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a  f the opcode..**
5cd0: 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72  .** Other keywor
5ce0: 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e  ds in the commen
5cf0: 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65  t that follows e
5d00: 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65  ach case are use
5d10: 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63  d to.** construc
5d20: 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54  t the OPFLG_INIT
5d30: 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68  IALIZER value th
5d40: 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f  at initializes o
5d50: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e  pcodeProperty[].
5d60: 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63  .** Keywords inc
5d70: 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20  lude: in1, in2, 
5d80: 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  in3, out2, out3.
5d90: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
5da0: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
5db0: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
5dc0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
5dd0: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
5de0: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
5df0: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
5e00: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
5e10: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
5e20: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
5e30: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
5e40: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
5e50: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
5e60: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
5e70: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
5e80: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
5e90: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
5ea0: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
5eb0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
5ec0: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
5ed0: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
5ee0: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
5ef0: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
5f00: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
5f10: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
5f20: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
5f30: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
5f40: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
5f50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f90: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
5fa0: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
5fb0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
5fc0: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
5fd0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
5fe0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
5ff0: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
6000: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
6010: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
6020: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
6030: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
6040: 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68  rogram..**.** Th
6050: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69  e P1 parameter i
6060: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75  s not actually u
6070: 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
6080: 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74  de.  However, it
6090: 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  .** is sometimes
60a0: 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61   set to 1 instea
60b0: 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74  d of 0 as a hint
60c0: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   to the command-
60d0: 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68  line shell.** th
60e0: 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20  at this Goto is 
60f0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
6100: 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68  loop and that th
6110: 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20  e lines from P2 
6120: 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63  down.** to the c
6130: 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75  urrent line shou
6140: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66  ld be indented f
6150: 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
6160: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  t..*/.case OP_Go
6170: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6180: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d    /* jump */.jum
6190: 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
61a0: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
61b0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
61c0: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f  p->p2 - 1];..  /
61d0: 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61  * Opcodes that a
61e0: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62  re used as the b
61f0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6200: 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65  (OP_Next, OP_Pre
6210: 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74  v,.  ** OP_VNext
6220: 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74 2c  , OP_RowSetNext,
6230: 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78   or OP_SorterNex
6240: 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65  t) all jump here
6250: 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c   upon.  ** compl
6260: 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f  etion.  Check to
6270: 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f   see if sqlite3_
6280: 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20  interrupt() has 
6290: 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a  been called.  **
62a0: 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72   or if the progr
62b0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65  ess callback nee
62c0: 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ds to be invoked
62d0: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  . .  **.  ** Thi
62e0: 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74  s code uses unst
62f0: 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20  ructured "goto" 
6300: 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64  statements and d
6310: 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65  oes not look cle
6320: 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61  an..  ** But tha
6330: 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20  t is not due to 
6340: 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61  sloppy coding ha
6350: 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69  bits. The code i
6360: 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20  s written this. 
6370: 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66   ** way for perf
6380: 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69  ormance, to avoi
6390: 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20  d having to run 
63a0: 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e  the interrupt an
63b0: 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20  d progress.  ** 
63c0: 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20  checks on every 
63d0: 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65  opcode.  This he
63e0: 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70  lps sqlite3_step
63f0: 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20  () to run about 
6400: 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72  1.5%.  ** faster
6410: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76   according to "v
6420: 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63  algrind --tool=c
6430: 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68  achegrind" */.ch
6440: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
6450: 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  t:.  if( db->u1.
6460: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
6470: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6480: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66  o_interrupt;.#if
6490: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
64a0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
64b0: 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65  CK.  /* Call the
64c0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
64d0: 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66  ck if it is conf
64e0: 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72  igured and the r
64f0: 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20  equired number. 
6500: 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20   ** of VDBE ops 
6510: 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74  have been execut
6520: 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65  ed (either since
6530: 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e   this invocation
6540: 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   of.  ** sqlite3
6550: 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69  VdbeExec() or si
6560: 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68  nce last time th
6570: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6580: 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e  ack was called).
6590: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f  .  ** If the pro
65a0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72  gress callback r
65b0: 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  eturns non-zero,
65c0: 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61   exit the virtua
65d0: 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20  l machine with. 
65e0: 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64   ** a return cod
65f0: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a  e SQLITE_ABORT..
6600: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
6610: 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20 6e  Progress!=0 && n
6620: 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73  VmStep>=nProgres
6630: 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 61 73  sLimit ){.    as
6640: 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72  sert( db->nProgr
6650: 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20  essOps!=0 );.   
6660: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
6670: 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e  = nVmStep + db->
6680: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28  nProgressOps - (
6690: 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f  nVmStep%db->nPro
66a0: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69  gressOps);.    i
66b0: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
66c0: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
66d0: 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  g) ){.      rc =
66e0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
66f0: 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  T;.      goto vd
6700: 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20  be_error_halt;. 
6710: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
6720: 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f    .  break;.}../
6730: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
6740: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
6750: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
6760: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
6770: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
6780: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
6790: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
67a0: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
67b0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
67c0: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
67d0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
67e0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
67f0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
6800: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6810: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6820: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
6830: 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20  c(pIn1)==0 );.  
6840: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
6850: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e  (p, pIn1);.  pIn
6860: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
6870: 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  nt;.  pIn1->u.i 
6880: 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29  = (int)(pOp-aOp)
6890: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
68a0: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
68b0: 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a 75  );..  /* Most ju
68c0: 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20 64 6f  mp operations do
68d0: 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69 73 20   a goto to this 
68e0: 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  spot in order to
68f0: 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74 68 65   update.  ** the
6900: 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a 2f   pOp pointer. */
6910: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20 70  .jump_to_p2:.  p
6920: 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
6930: 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b 3b  2 - 1];.  break;
6940: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6950: 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20  Return P1 * * * 
6960: 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
6970: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
6980: 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61  tion after the a
6990: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
69a0: 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a  er P1.  After.**
69b0: 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73   the jump, regis
69c0: 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75  ter P1 becomes u
69d0: 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  ndefined..*/.cas
69e0: 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20  e OP_Return: {  
69f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
6a00: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
6a10: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6a20: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
6a30: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
6a40: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d  pOp = &aOp[pIn1-
6a50: 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66  >u.i];.  pIn1->f
6a60: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
6a70: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
6a80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69  ../* Opcode: Ini
6a90: 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32  tCoroutine P1 P2
6aa0: 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   P3 * *.**.** Se
6ab0: 74 20 75 70 20 72 65 67 69 73 74 65 72 20 50 31  t up register P1
6ac0: 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
6ad0: 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f   Yield to the co
6ae0: 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74  routine.** locat
6af0: 65 64 20 61 74 20 61 64 64 72 65 73 73 20 50 33  ed at address P3
6b00: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30  ..**.** If P2!=0
6b10: 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74   then the corout
6b20: 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ine implementati
6b30: 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  on immediately f
6b40: 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f  ollows.** this o
6b50: 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20  pcode.  So jump 
6b60: 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69  over the corouti
6b70: 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ne implementatio
6b80: 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20  n to.** address 
6b90: 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
6ba0: 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  so: EndCoroutine
6bb0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74  .*/.case OP_Init
6bc0: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
6bd0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
6be0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6bf0: 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  &&  pOp->p1<=(p-
6c00: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
6c10: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
6c20: 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70  Op->p2>=0 && pOp
6c30: 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
6c40: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
6c50: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
6c60: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20  ->nOp );.  pOut 
6c70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6c80: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62  ;.  assert( !Vdb
6c90: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
6ca0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ) );.  pOut->u.i
6cb0: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
6cc0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
6cd0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70  MEM_Int;.  if( p
6ce0: 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
6cf0: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
6d00: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6d10: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
6d20: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6d30: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
6d40: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
6d50: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
6d60: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
6d70: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
6d80: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
6d90: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
6da0: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6db0: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6dc0: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
6dd0: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6de0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6df0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
6e00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6e10: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
6e20: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
6e30: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6e40: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6e50: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6e60: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
6e70: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
6e80: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
6e90: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
6ea0: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
6eb0: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
6ec0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
6ed0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
6ee0: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
6ef0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
6f00: 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  Op );.  pOp = &a
6f10: 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d  Op[pCaller->p2 -
6f20: 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61   1];.  pIn1->fla
6f30: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
6f40: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
6f50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
6f60: 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
6f70: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
6f80: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
6f90: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
6fa0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68 69  egister P1.  Thi
6fb0: 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66  s.** has the eff
6fc0: 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20  ect of yielding 
6fd0: 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a  to a coroutine..
6fe0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72  **.** If the cor
6ff0: 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c  outine that is l
7000: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7010: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
7020: 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f   with.** Yield o
7030: 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  r Return then co
7040: 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65  ntinue to the ne
7050: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
7060: 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63   But if.** the c
7070: 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65  oroutine launche
7080: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
7090: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
70a0: 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c  ** EndCoroutine,
70b0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
70c0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e   rather than con
70d0: 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65  tinuing with the
70e0: 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63  .** next instruc
70f0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
7100: 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74  also: InitCorout
7110: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  ine.*/.case OP_Y
7120: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
7130: 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20     /* in1, jump 
7140: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
7150: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7160: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7170: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
7180: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
7190: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
71a0: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
71b0: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
71c0: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
71d0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
71e0: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
71f0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
7200: 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  1);.  pOp = &aOp
7210: 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61  [pcDest];.  brea
7220: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7230: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
7240: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
7250: 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b  Synopsis:  if r[
7260: 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a  P3]=null halt.**
7270: 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61  .** Check the va
7280: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
7290: 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55  P3.  If it is NU
72a0: 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69  LL then Halt usi
72b0: 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  ng.** parameter 
72c0: 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61  P1, P2, and P4 a
72d0: 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61  s if this were a
72e0: 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f   Halt instructio
72f0: 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61  n.  If the.** va
7300: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
7310: 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P3 is not NULL, 
7320: 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e  then this routin
7330: 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a  e is a no-op..**
7340: 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
7350: 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a  r should be 1..*
7360: 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66  /.case OP_HaltIf
7370: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20  Null: {      /* 
7380: 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
7390: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
73a0: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
73b0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
73c0: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
73d0: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
73e0: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
73f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
7400: 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
7410: 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69  *.** Exit immedi
7420: 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e  ately.  All open
7430: 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72   cursors, etc ar
7440: 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f  e closed.** auto
7450: 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  matically..**.**
7460: 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c   P1 is the resul
7470: 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  t code returned 
7480: 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  by sqlite3_exec(
7490: 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ), sqlite3_reset
74a0: 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65  (),.** or sqlite
74b0: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46  3_finalize().  F
74c0: 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74  or a normal halt
74d0: 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65  , this should be
74e0: 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a   SQLITE_OK (0)..
74f0: 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69  ** For errors, i
7500: 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74  t can be some ot
7510: 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50  her value.  If P
7520: 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c  1!=0 then P2 wil
7530: 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  l determine.** w
7540: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f  hether or not to
7550: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75   rollback the cu
7560: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
7570: 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62  n.  Do not rollb
7580: 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45  ack.** if P2==OE
7590: 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f  _Fail. Do the ro
75a0: 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45  llback if P2==OE
75b0: 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50  _Rollback.  If P
75c0: 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20  2==OE_Abort,.** 
75d0: 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c  then back out al
75e0: 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  l changes that h
75f0: 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72  ave occurred dur
7600: 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69  ing this executi
7610: 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  on of the.** VDB
7620: 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f  E, but do not ro
7630: 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
7640: 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49  action. .**.** I
7650: 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  f P4 is not null
7660: 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65   then it is an e
7670: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
7680: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ing..**.** P5 is
7690: 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e   a value between
76a0: 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73   0 and 4, inclus
76b0: 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69  ive, that modifi
76c0: 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  es the P4 string
76d0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28  ..**.**    0:  (
76e0: 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20  no change).**   
76f0: 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   1:  NOT NULL co
7700: 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  ntraint failed: 
7710: 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49  P4.**    2:  UNI
7720: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  QUE constraint f
7730: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
7740: 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  3:  CHECK constr
7750: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7760: 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47  **    4:  FOREIG
7770: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
7780: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a   failed: P4.**.*
7790: 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
77a0: 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55  ero and P4 is NU
77b0: 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68  LL, then everyth
77c0: 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22 3a  ing after the ":
77d0: 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e  " is.** omitted.
77e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
77f0: 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74  an implied "Halt
7800: 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74   0 0 0" instruct
7810: 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20  ion inserted at 
7820: 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a  the very end of.
7830: 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d  ** every program
7840: 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73  .  So a jump pas
7850: 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72  t the last instr
7860: 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  uction of the pr
7870: 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20  ogram.** is the 
7880: 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e  same as executin
7890: 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  g Halt..*/.case 
78a0: 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63 6f 6e  OP_Halt: {.  con
78b0: 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 0a  st char *zType;.
78c0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c    const char *zL
78d0: 6f 67 46 6d 74 3b 0a 20 20 56 64 62 65 46 72 61  ogFmt;.  VdbeFra
78e0: 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e  me *pFrame;.  in
78f0: 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20  t pcx;..  pcx = 
7900: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
7910: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  ;.  if( pOp->p1=
7920: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
7930: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
7940: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
7950: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
7960: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
7970: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
7980: 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70     pFrame = p->p
7990: 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46  Frame;.    p->pF
79a0: 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70  rame = pFrame->p
79b0: 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e  Parent;.    p->n
79c0: 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c  Frame--;.    sql
79d0: 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
79e0: 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
79f0: 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71  e);.    pcx = sq
7a00: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
7a10: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
7a20: 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64     lastRowid = d
7a30: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
7a40: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
7a50: 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
7a60: 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e    /* Instruction
7a70: 20 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50   pcx is the OP_P
7a80: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
7a90: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
7aa0: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
7ab0: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
7ac0: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
7ad0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7ae0: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
7af0: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
7b00: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
7b10: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
7b20: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
7b30: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
7b40: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
7b50: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
7b60: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
7b70: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
7b80: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
7b90: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
7ba0: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
7bb0: 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d  /.      pcx = p-
7bc0: 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a  >aOp[pcx].p2-1;.
7bd0: 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20      }.    aOp = 
7be0: 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d  p->aOp;.    aMem
7bf0: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
7c00: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b  pOp = &aOp[pcx];
7c10: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7c20: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
7c30: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
7c40: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
7c50: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78  2;.  p->pc = pcx
7c60: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
7c70: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
7c80: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
7c90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
7ca0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
7cb0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
7cc0: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
7d00: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
7d10: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
7d20: 3e 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70  >p5>=1 && pOp->p
7d30: 35 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65  5<=4 );.      te
7d40: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7d50: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
7d60: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
7d70: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7d80: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
7d90: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7da0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
7db0: 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a        zType = az
7dc0: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b  Type[pOp->p5-1];
7dd0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7de0: 20 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20    zType = 0;.   
7df0: 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a   }.    assert( z
7e00: 54 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e  Type!=0 || pOp->
7e10: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a  p4.z!=0 );.    z
7e20: 4c 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20  LogFmt = "abort 
7e30: 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25  at %d in [%s]: %
7e40: 73 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70  s";.    if( zTyp
7e50: 65 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  e && pOp->p4.z )
7e60: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
7e70: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20  dbeError(p, "%s 
7e80: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7e90: 64 3a 20 25 73 22 2c 20 7a 54 79 70 65 2c 20 70  d: %s", zType, p
7ea0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
7eb0: 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
7ec0: 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  .z ){.      sqli
7ed0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
7ee0: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
7ef0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7f00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
7f10: 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74  ror(p, "%s const
7f20: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 7a  raint failed", z
7f30: 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  Type);.    }.   
7f40: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
7f50: 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70  ->p1, zLogFmt, p
7f60: 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e  cx, p->zSql, p->
7f70: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
7f80: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
7f90: 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72  Halt(p);.  asser
7fa0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  t( rc==SQLITE_BU
7fb0: 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
7fc0: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
7fd0: 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28  E_ERROR );.  if(
7fe0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
7ff0: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
8000: 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
8010: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
8020: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
8030: 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30  E_OK || (p->rc&0
8040: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  xff)==SQLITE_CON
8050: 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61  STRAINT );.    a
8060: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
8070: 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  E_OK || db->nDef
8080: 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64  erredCons>0 || d
8090: 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
80a0: 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20  ons>0 );.    rc 
80b0: 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45  = p->rc ? SQLITE
80c0: 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f  _ERROR : SQLITE_
80d0: 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  DONE;.  }.  goto
80e0: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
80f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
8100: 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ger P1 P2 * * *.
8110: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8120: 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2]=P1.**.** The 
8130: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
8140: 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74  alue P1 is writt
8150: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
8160: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8170: 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20  Integer: {      
8180: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8190: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
81a0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
81b0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
81c0: 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p1;.  break;.}
81d0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
81e0: 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  64 * P2 * P4 *.*
81f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8200: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
8210: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
8220: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  64-bit integer v
8230: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
8240: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
8250: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
8260: 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20  ase OP_Int64: { 
8270: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8280: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
8290: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
82a0: 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
82b0: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20  pOp->p4.pI64!=0 
82c0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
82d0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a   *pOp->p4.pI64;.
82e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
82f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
8300: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
8310: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a  * Opcode: Real *
8320: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8330: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8340: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8350: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8360: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
8370: 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  t value..** Writ
8380: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
8390: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
83a0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20  /.case OP_Real: 
83b0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
83c0: 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54  same as TK_FLOAT
83d0: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  , out2 */.  pOut
83e0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
83f0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8400: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52  t->flags = MEM_R
8410: 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21  eal;.  assert( !
8420: 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f  sqlite3IsNaN(*pO
8430: 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a  p->p4.pReal) );.
8440: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70    pOut->u.r = *p
8450: 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20  Op->p4.pReal;.  
8460: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
8470: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
8480: 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  ng8 * P2 * P4 *.
8490: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
84a0: 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34  2]='P4'.**.** P4
84b0: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c   points to a nul
84c0: 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d   terminated UTF-
84d0: 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f  8 string. This o
84e0: 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f  pcode is transfo
84f0: 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20  rmed .** into a 
8500: 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65  String opcode be
8510: 66 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75  fore it is execu
8520: 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73  ted for the firs
8530: 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a  t time.  During.
8540: 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72  ** this transfor
8550: 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67  mation, the leng
8560: 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20  th of string P4 
8570: 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20  is computed and 
8580: 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65  stored.** as the
8590: 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a   P1 parameter..*
85a0: 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67  /.case OP_String
85b0: 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  8: {         /* 
85c0: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e  same as TK_STRIN
85d0: 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  G, out2 */.  ass
85e0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
85f0: 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  0 );.  pOut = ou
8600: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8610: 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pOp);.  pOp->opc
8620: 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b  ode = OP_String;
8630: 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c  .  pOp->p1 = sql
8640: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70  ite3Strlen30(pOp
8650: 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65  ->p4.z);..#ifnde
8660: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
8670: 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69  F16.  if( encodi
8680: 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  ng!=SQLITE_UTF8 
8690: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
86a0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
86b0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
86c0: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
86d0: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
86e0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
86f0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67  QLITE_TOOBIG ) g
8700: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
8710: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8720: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
8730: 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
8740: 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f  encoding) ) goto
8750: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
8760: 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c  ert( pOut->szMal
8770: 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a  loc>0 && pOut->z
8780: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
8790: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56  );.    assert( V
87a0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
87b0: 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f  ut)==0 );.    pO
87c0: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30  ut->szMalloc = 0
87d0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
87e0: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
87f0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
8800: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
8810: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
8820: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
8830: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
8840: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
8850: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
8860: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
8870: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
8880: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a   = pOut->n;.  }.
8890: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
88a0: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
88b0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
88c0: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
88d0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
88e0: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
88f0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
8900: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
8910: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
8920: 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50  tring P1 P2 P3 P
8930: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
8940: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
8950: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
8960: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
8970: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
8980: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
8990: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
89a0: 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 61 6e  *.** If P5!=0 an
89b0: 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
89c0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
89d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
89e0: 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  o, then.** the d
89f0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
8a00: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f  egister P2 is co
8a10: 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e  nverted to BLOB.
8a20: 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73    The content is
8a30: 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71  .** the same seq
8a40: 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20  uence of bytes, 
8a50: 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74  it is merely int
8a60: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
8a70: 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  OB instead.** of
8a80: 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66   a string, as if
8a90: 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53   it had been CAS
8aa0: 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  T..*/.case OP_St
8ab0: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
8ac0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
8ad0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
8ae0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  =0 );.  pOut = o
8af0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8b00: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
8b10: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
8b20: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
8b30: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
8b40: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
8b50: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
8b60: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
8b70: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
8b80: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
8b90: 75 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ut);.#ifndef SQL
8ba0: 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f  ITE_LIKE_DOESNT_
8bb0: 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66  MATCH_BLOBS.  if
8bc0: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
8bd0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
8be0: 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
8bf0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
8c00: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8c10: 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  );.    pIn3 = &a
8c20: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
8c30: 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
8c40: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
8c50: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d  );.    if( pIn3-
8c60: 3e 75 2e 69 20 29 20 70 4f 75 74 2d 3e 66 6c 61  >u.i ) pOut->fla
8c70: 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  gs = MEM_Blob|ME
8c80: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8c90: 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  m;.  }.#endif.  
8ca0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8cb0: 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20  ode: Null P1 P2 
8cc0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
8cd0: 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e  is:  r[P2..P3]=N
8ce0: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ULL.**.** Write 
8cf0: 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  a NULL into regi
8d00: 73 74 65 72 73 20 50 32 2e 20 20 49 66 20 50 33  sters P2.  If P3
8d10: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 50 32   greater than P2
8d20: 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74  , then also writ
8d30: 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  e.** NULL into r
8d40: 65 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 65  egister P3 and e
8d50: 76 65 72 79 20 72 65 67 69 73 74 65 72 20 69 6e  very register in
8d60: 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20   between P2 and 
8d70: 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73  P3.  If P3.** is
8d80: 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28 74   less than P2 (t
8d90: 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a  ypically P3 is z
8da0: 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72  ero) then only r
8db0: 65 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a  egister P2 is.**
8dc0: 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a   set to NULL..**
8dd0: 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76 61  .** If the P1 va
8de0: 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
8df0: 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74   then also set t
8e00: 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66  he MEM_Cleared f
8e10: 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e  lag so that.** N
8e20: 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20  ULL values will 
8e30: 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61  not compare equa
8e40: 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45  l even if SQLITE
8e50: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f  _NULLEQ is set o
8e60: 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50  n.** OP_Ne or OP
8e70: 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  _Eq..*/.case OP_
8e80: 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
8e90: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
8ea0: 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75  nt cnt;.  u16 nu
8eb0: 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d  llFlag;.  pOut =
8ec0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8ed0: 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d  p, pOp);.  cnt =
8ee0: 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32   pOp->p3-pOp->p2
8ef0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8f00: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
8f10: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
8f20: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8f30: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
8f40: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
8f50: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
8f60: 75 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e  ull;.  while( cn
8f70: 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b  t>0 ){.    pOut+
8f80: 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  +;.    memAboutT
8f90: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
8fa0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8fb0: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
8fc0: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
8fd0: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20  gs = nullFlag;. 
8fe0: 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20     cnt--;.  }.  
8ff0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9000: 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31  ode: SoftNull P1
9010: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f   * * * *.** Syno
9020: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c  psis:  r[P1]=NUL
9030: 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69  L.**.** Set regi
9040: 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20  ster P1 to have 
9050: 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61  the value NULL a
9060: 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50  s seen by the OP
9070: 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69  _MakeRecord.** i
9080: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20  nstruction, but 
9090: 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20  do not free any 
90a0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
90b0: 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64  emory associated
90c0: 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67   with.** the reg
90d0: 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69  ister, so that i
90e0: 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20  f the value was 
90f0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
9100: 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65   that was.** pre
9110: 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75  viously copied u
9120: 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74  sing OP_SCopy, t
9130: 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63  he copies will c
9140: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61  ontinue to be va
9150: 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lid..*/.case OP_
9160: 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73  SoftNull: {.  as
9170: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9180: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
9190: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
91a0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
91b0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
91c0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
91d0: 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75  ut->flags|MEM_Nu
91e0: 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e  ll)&~MEM_Undefin
91f0: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
9200: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
9210: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
9220: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9230: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
9240: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
9250: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
9260: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
9270: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
9280: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
9290: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
92a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
92b0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
92c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
92d0: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
92e0: 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d  NGTH );.  pOut =
92f0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9300: 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74  p, pOp);.  sqlit
9310: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
9320: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
9330: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
9340: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
9350: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
9360: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9370: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9380: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
9390: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
93a0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
93b0: 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28  r[P2]=parameter(
93c0: 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61  P1,P4).**.** Tra
93d0: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
93e0: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
93f0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
9400: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
9410: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
9420: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
9430: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
9440: 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20  n P4..** The P4 
9450: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
9460: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
9470: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
9480: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
9490: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
94a0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d    /* out2 */.  M
94b0: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
94c0: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
94d0: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
94e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
94f0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
9500: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
9510: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
9520: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70   || pOp->p4.z==p
9530: 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d  ->azVar[pOp->p1-
9540: 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1] );.  pVar = &
9550: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
9560: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
9570: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
9580: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
9590: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
95a0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
95b0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
95c0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
95d0: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
95e0: 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61  t, pVar, MEM_Sta
95f0: 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  tic);.  UPDATE_M
9600: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
9610: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
9620: 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50  * Opcode: Move P
9630: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
9640: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50  ynopsis:  r[P2@P
9650: 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a  3]=r[P1@P3].**.*
9660: 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61  * Move the P3 va
9670: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
9680: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65   P1..P1+P3-1 ove
9690: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
96a0: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e  ers P2..P2+P3-1.
96b0: 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e    Registers P1..
96c0: 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c  P1+P3-1 are.** l
96d0: 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55  eft holding a NU
96e0: 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  LL.  It is an er
96f0: 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72  ror for register
9700: 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50   ranges.** P1..P
9710: 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50  1+P3-1 and P2..P
9720: 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61  2+P3-1 to overla
9730: 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  p.  It is an err
9740: 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20  or.** for P3 to 
9750: 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a  be less than 1..
9760: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
9770: 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20   {.  int n;     
9780: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9790: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
97a0: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
97b0: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
97c0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
97d0: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
97e0: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
97f0: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
9800: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
9810: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
9820: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
9830: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
9840: 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26  t( n>0 && p1>0 &
9850: 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  & p2>0 );.  asse
9860: 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20  rt( p1+n<=p2 || 
9870: 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70  p2+n<=p1 );..  p
9880: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b  In1 = &aMem[p1];
9890: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
98a0: 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  p2];.  do{.    a
98b0: 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d  ssert( pOut<=&aM
98c0: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  em[(p->nMem-p->n
98d0: 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
98e0: 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61  assert( pIn1<=&a
98f0: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  Mem[(p->nMem-p->
9900: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9910: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
9920: 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
9930: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
9940: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
9950: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
9960: 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a  ve(pOut, pIn1);.
9970: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9980: 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74  BUG.    if( pOut
9990: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61  ->pScopyFrom>=&a
99a0: 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d  Mem[p1] && pOut-
99b0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74  >pScopyFrom<pOut
99c0: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
99d0: 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f  pScopyFrom += pO
99e0: 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20 20  p->p2 - p1;.    
99f0: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65 65  }.#endif.    Dee
9a00: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
9a10: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
9a20: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
9a30: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
9a40: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68     pOut++;.  }wh
9a50: 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72  ile( --n );.  br
9a60: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9a70: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33  e: Copy P1 P2 P3
9a80: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9a90: 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50  : r[P2@P3+1]=r[P
9aa0: 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  1@P3+1].**.** Ma
9ab0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
9ac0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
9ad0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
9ae0: 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a  P2..P2+P3..**.**
9af0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
9b00: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
9b10: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
9b20: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
9b30: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
9b40: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
9b50: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
9b60: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
9b70: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
9b80: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
9b90: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31   pOp->p3;.  pIn1
9ba0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9bb0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9bc0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
9bd0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
9be0: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29   );.  while( 1 )
9bf0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
9c00: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9c10: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
9c20: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
9c30: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
9c40: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9c50: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
9c60: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
9c70: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
9c80: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
9c90: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
9ca0: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
9cb0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
9cc0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
9cd0: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
9ce0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9cf0: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
9d00: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9d10: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
9d20: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
9d30: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
9d40: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9d50: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
9d60: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
9d70: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
9d80: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9d90: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
9da0: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
9db0: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
9dc0: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
9dd0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
9de0: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
9df0: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
9e00: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
9e10: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
9e20: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
9e30: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
9e40: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
9e50: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
9e60: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
9e70: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
9e80: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
9e90: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
9ea0: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
9eb0: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
9ec0: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
9ed0: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
9ee0: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
9ef0: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
9f00: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
9f10: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9f20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9f30: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
9f40: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9f50: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
9f60: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
9f70: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
9f80: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
9f90: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
9fa0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9fb0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
9fc0: 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74  pyFrom==0 ) pOut
9fd0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70  ->pScopyFrom = p
9fe0: 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72  In1;.#endif.  br
9ff0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a000: 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20 50 32  e: IntCopy P1 P2
a010: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
a020: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
a030: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
a040: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
a050: 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
a060: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
a070: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
a080: 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65  s is an optimize
a090: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f  d version of SCo
a0a0: 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e  py that works on
a0b0: 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a  ly for integer.*
a0c0: 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73  * values..*/.cas
a0d0: 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20  e OP_IntCopy: { 
a0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
a0f0: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
a100: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a110: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
a120: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
a130: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
a140: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
a150: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a160: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 70  SetInt64(pOut, p
a170: 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In1->u.i);.  bre
a180: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a190: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
a1a0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
a1b0: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
a1c0: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
a1d0: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
a1e0: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
a1f0: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
a200: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
a210: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
a220: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
a230: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
a240: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
a250: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
a260: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
a270: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
a280: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
a290: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
a2a0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
a2b0: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
a2c0: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
a2d0: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
a2e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
a2f0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
a300: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
a310: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
a320: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
a330: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
a340: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
a350: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
a360: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
a370: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
a380: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a390: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
a3a0: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
a3b0: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
a3c0: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
a3d0: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
a3e0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
a3f0: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
a400: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
a410: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
a420: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
a430: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
a440: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
a450: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
a460: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
a470: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
a480: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
a490: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
a4a0: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
a4b0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
a4c0: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
a4d0: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
a4e0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
a4f0: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
a500: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
a510: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
a520: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
a530: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
a540: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
a550: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
a560: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
a570: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
a580: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
a590: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a5a0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
a5b0: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
a5c0: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
a5d0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a5e0: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
a5f0: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
a600: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
a610: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
a620: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
a630: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
a640: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
a650: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
a660: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
a670: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
a680: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
a690: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
a6a0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
a6b0: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
a6c0: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
a6d0: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
a6e0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
a6f0: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
a700: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
a710: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
a720: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
a730: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
a740: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
a750: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
a760: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a770: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
a780: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
a790: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
a7a0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
a7b0: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
a7c0: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
a7d0: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
a7e0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
a7f0: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
a800: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
a810: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
a820: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
a830: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
a840: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
a850: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
a860: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
a870: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a880: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
a890: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
a8a0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
a8b0: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
a8c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
a8d0: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
a8e0: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
a8f0: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
a900: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
a910: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
a920: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
a930: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a940: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a950: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
a960: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
a970: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
a980: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
a990: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
a9a0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
a9b0: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
a9c0: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
a9d0: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
a9e0: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
a9f0: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
aa00: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
aa10: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
aa20: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
aa30: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
aa40: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
aa50: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
aa60: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
aa70: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
aa80: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
aa90: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
aaa0: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
aab0: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
aac0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
aad0: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
aae0: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
aaf0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
ab00: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
ab10: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
ab20: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
ab30: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
ab40: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
ab50: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
ab60: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
ab70: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
ab80: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
ab90: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
aba0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
abb0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
abc0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
abd0: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
abe0: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
abf0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
ac00: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
ac10: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
ac20: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
ac30: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
ac40: 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51  ) + 1;.  rc = SQ
ac50: 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f  LITE_ROW;.  goto
ac60: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
ac70: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63  ./* Opcode: Conc
ac80: 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  at P1 P2 P3 * *.
ac90: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
aca0: 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a  3]=r[P2]+r[P1].*
acb0: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78  *.** Add the tex
acc0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  t in register P1
acd0: 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66   onto the end of
ace0: 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20   the text in.** 
acf0: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
ad00: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
ad10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
ad20: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68  .** If either th
ad30: 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20  e P1 or P2 text 
ad40: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  are NULL then st
ad50: 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a  ore NULL in P3..
ad60: 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20  **.**   P3 = P2 
ad70: 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69  || P1.**.** It i
ad80: 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31  s illegal for P1
ad90: 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68   and P3 to be th
ada0: 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e  e same register.
adb0: 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69   Sometimes,.** i
adc0: 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65  f P3 is the same
add0: 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c   register as P2,
ade0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
adf0: 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74  ion is able.** t
ae00: 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79  o avoid a memcpy
ae10: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
ae20: 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20  oncat: {        
ae30: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ae40: 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e  _CONCAT, in1, in
ae50: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
ae60: 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20   nByte;..  pIn1 
ae70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ae80: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
ae90: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
aea0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
aeb0: 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
aec0: 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66  n1!=pOut );.  if
aed0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
aee0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
aef0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
af00: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
af10: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
af20: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66   break;.  }.  if
af30: 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  ( ExpandBlob(pIn
af40: 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62  1) || ExpandBlob
af50: 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f  (pIn2) ) goto no
af60: 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66  _mem;.  Stringif
af70: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
af80: 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  );.  Stringify(p
af90: 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In2, encoding);.
afa0: 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e    nByte = pIn1->
afb0: 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69  n + pIn2->n;.  i
afc0: 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69  f( nByte>db->aLi
afd0: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
afe0: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
aff0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
b000: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
b010: 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
b020: 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70   (int)nByte+2, p
b030: 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20  Out==pIn2) ){.  
b040: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
b050: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
b060: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74  lag(pOut, MEM_St
b070: 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d  r);.  if( pOut!=
b080: 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63  pIn2 ){.    memc
b090: 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32  py(pOut->z, pIn2
b0a0: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20  ->z, pIn2->n);. 
b0b0: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75   }.  memcpy(&pOu
b0c0: 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70  t->z[pIn2->n], p
b0d0: 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29  In1->z, pIn1->n)
b0e0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
b0f0: 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  e]=0;.  pOut->z[
b100: 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20  nByte+1] = 0;.  
b110: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
b120: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
b130: 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
b140: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
b150: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
b160: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
b170: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
b180: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
b190: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b1a0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
b1b0: 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]+r[P2].**
b1c0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
b1d0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b1e0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
b1f0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b200: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b210: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b220: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b230: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b240: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b250: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b260: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
b270: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b280: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b290: 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a  1]*r[P2].**.**.*
b2a0: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
b2b0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b2c0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
b2d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b2e0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b2f0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b300: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b310: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b320: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b330: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b340: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
b350: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b360: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
b370: 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]-r[P1].**.*
b380: 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76  * Subtract the v
b390: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b3a0: 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c   P1 from the val
b3b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b3c0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b3d0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b3e0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b3f0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b400: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b410: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b420: 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50  Opcode: Divide P
b430: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b440: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
b450: 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]/r[P1].**.*
b460: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
b470: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b480: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
b490: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b4a0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b4b0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b4c0: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
b4d0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
b4e0: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b4f0: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
b500: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b510: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
b520: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
b530: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b540: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b550: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
b560: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b570: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b580: 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  2]%r[P1].**.** C
b590: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
b5a0: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
b5b0: 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69  er register P2 i
b5c0: 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a  s divided by .**
b5d0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
b5e0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b5f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b600: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
b610: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b620: 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  1 is zero the re
b630: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
b640: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
b650: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
b660: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b670: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b690: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b6a0: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
b6b0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b6c0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
b6d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b6e0: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
b6f0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b700: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b720: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
b730: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b740: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
b750: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
b760: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b770: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
b780: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
b790: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
b7a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b7b0: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
b7c0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63  in2, out3 */.  c
b7d0: 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f  har bIntint;   /
b7e0: 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73  * Started out as
b7f0: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65   two integer ope
b800: 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66  rands */.  u16 f
b810: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
b820: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
b830: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
b840: 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  uts */.  u16 typ
b850: 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e1;      /* Nume
b860: 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74  ric type of left
b870: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31   operand */.  u1
b880: 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a  6 type2;      /*
b890: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
b8a0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
b8b0: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
b8c0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
b8d0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
b8e0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
b8f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
b900: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
b910: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
b920: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
b930: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
b940: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
b950: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
b960: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
b970: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
b980: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
b990: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
b9a0: 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69    type1 = numeri
b9b0: 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70  cType(pIn1);.  p
b9c0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
b9d0: 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20  >p2];.  type2 = 
b9e0: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32  numericType(pIn2
b9f0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
ba00: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
ba10: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
ba20: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  s | pIn2->flags;
ba30: 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20  .  if( (flags & 
ba40: 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67  MEM_Null)!=0 ) g
ba50: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
ba60: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
ba70: 20 69 66 28 20 28 74 79 70 65 31 20 26 20 74 79   if( (type1 & ty
ba80: 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  pe2 & MEM_Int)!=
ba90: 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49  0 ){.    iA = pI
baa0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20  n1->u.i;.    iB 
bab0: 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn2->u.i;.   
bac0: 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20   bIntint = 1;.  
bad0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
bae0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
baf0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
bb00: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64    if( sqlite3Add
bb10: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
bb20: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
bb30: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bb40: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69   OP_Subtract:  i
bb50: 66 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  f( sqlite3SubInt
bb60: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
bb70: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
bb80: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
bb90: 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20  _Multiply:  if( 
bba0: 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
bbb0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
bbc0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
bbd0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69        case OP_Di
bbe0: 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20  vide: {.        
bbf0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
bc00: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bc10: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
bc20: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26      if( iA==-1 &
bc30: 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49  & iB==SMALLEST_I
bc40: 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d  NT64 ) goto fp_m
bc50: 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20  ath;.        iB 
bc60: 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  /= iA;.        b
bc70: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
bc80: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20      default: {. 
bc90: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
bca0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
bcb0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bcc0: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
bcd0: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
bce0: 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41          iB %= iA
bcf0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
bd00: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
bd10: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
bd20: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
bd30: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
bd40: 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Int);.  }else{. 
bd50: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a     bIntint = 0;.
bd60: 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20  fp_math:.    rA 
bd70: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
bd80: 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  lValue(pIn1);.  
bd90: 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64    rB = sqlite3Vd
bda0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32  beRealValue(pIn2
bdb0: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  );.    switch( p
bdc0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
bdd0: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
bde0: 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72           rB += r
bdf0: 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  A;       break;.
be00: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
be10: 62 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d  btract:    rB -=
be20: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
be30: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
be40: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20  Multiply:    rB 
be50: 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  *= rA;       bre
be60: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
be70: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
be80: 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30      /* (double)0
be90: 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49   In case of SQLI
bea0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
beb0: 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20  _POINT... */.   
bec0: 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f       if( rA==(do
bed0: 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72  uble)0 ) goto ar
bee0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bef0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
bf00: 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20   rB /= rA;.     
bf10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bf20: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
bf30: 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20   {.        iA = 
bf40: 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20  (i64)rA;.       
bf50: 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20   iB = (i64)rB;. 
bf60: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
bf70: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
bf80: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bf90: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
bfa0: 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a  A==-1 ) iA = 1;.
bfb0: 20 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f          rB = (do
bfc0: 75 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a  uble)(iB % iA);.
bfd0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
bfe0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66       }.    }.#if
bff0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
c000: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
c010: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
c020: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
c030: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
c040: 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  Int);.#else.    
c050: 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  if( sqlite3IsNaN
c060: 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f  (rB) ){.      go
c070: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c080: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c090: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
c0a0: 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  r = rB;.    MemS
c0b0: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c0c0: 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20   MEM_Real);.    
c0d0: 69 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65  if( ((type1|type
c0e0: 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20  2)&MEM_Real)==0 
c0f0: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
c100: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c110: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
c120: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
c130: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
c140: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
c150: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
c160: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c170: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
c180: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c190: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
c1a0: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
c1b0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
c1c0: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
c1d0: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
c1e0: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
c1f0: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
c200: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
c210: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
c220: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
c230: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
c240: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
c250: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
c260: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
c270: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
c280: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
c290: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
c2a0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
c2b0: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
c2c0: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
c2d0: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
c2e0: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
c2f0: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
c300: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
c310: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
c320: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
c330: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
c340: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
c350: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
c360: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
c370: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
c380: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
c390: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
c3a0: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
c3b0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
c3c0: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
c3d0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
c3e0: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
c3f0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
c400: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
c410: 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74  cly.  Only built
c420: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68 61  -in functions ha
c430: 76 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 69  ve access to thi
c440: 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  s feature..*/.ca
c450: 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b  se OP_CollSeq: {
c460: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
c470: 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
c480: 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  EQ );.  if( pOp-
c490: 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
c4a0: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
c4b0: 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  4(&aMem[pOp->p1]
c4c0: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 0);.  }.  brea
c4d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
c4e0: 20 46 75 6e 63 74 69 6f 6e 30 20 50 31 20 50 32   Function0 P1 P2
c4f0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
c500: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e  opsis: r[P3]=fun
c510: 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  c(r[P2@P5]).**.*
c520: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
c530: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
c540: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46  a pointer to a F
c550: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 20 74 68  uncDef object th
c560: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68  at.** defines th
c570: 65 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68  e function) with
c580: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
c590: 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
c5a0: 72 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63  r P2 and.** succ
c5b0: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
c5c0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
c5d0: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
c5e0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
c5f0: 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73   Register P3 mus
c600: 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20  t not be one of 
c610: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70  the function inp
c620: 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  uts..**.** P1 is
c630: 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73   a 32-bit bitmas
c640: 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  k indicating whe
c650: 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68  ther or not each
c660: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
c670: 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61   .** function wa
c680: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20  s determined to 
c690: 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63  be constant at c
c6a0: 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20  ompile time. If 
c6b0: 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67  the first.** arg
c6c0: 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61  ument was consta
c6d0: 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66  nt then bit 0 of
c6e0: 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73   P1 is set. This
c6f0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
c700: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
c710: 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63   meta data assoc
c720: 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65  iated with a use
c730: 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  r function argum
c740: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ent using the.**
c750: 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78   sqlite3_set_aux
c760: 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62  data() API may b
c770: 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65  e safely retaine
c780: 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
c790: 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  .** invocation o
c7a0: 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  f this opcode..*
c7b0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
c7c0: 75 6e 63 74 69 6f 6e 2c 20 41 67 67 53 74 65 70  unction, AggStep
c7d0: 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a  , AggFinal.*/./*
c7e0: 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f   Opcode: Functio
c7f0: 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
c800: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
c810: 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35  P3]=func(r[P2@P5
c820: 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  ]).**.** Invoke 
c830: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
c840: 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72  (P4 is a pointer
c850: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63   to an sqlite3_c
c860: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 74 68  ontext object th
c870: 61 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  at.** contains a
c880: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
c890: 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 72  function to be r
c8a0: 75 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  un) with P5 argu
c8b0: 6d 65 6e 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66  ments taken.** f
c8c0: 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
c8d0: 61 6e 64 20 73 75 63 63 65 73 73 6f 72 73 2e 20  and successors. 
c8e0: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
c8f0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
c900: 74 6f 72 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69  tored.** in regi
c910: 73 74 65 72 20 50 33 2e 20 20 52 65 67 69 73 74  ster P3.  Regist
c920: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
c930: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
c940: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
c950: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
c960: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
c970: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
c980: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
c990: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
c9a0: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
c9b0: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
c9c0: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
c9d0: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
c9e0: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
c9f0: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
ca00: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
ca10: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
ca20: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
ca30: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
ca40: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
ca50: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
ca60: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
ca70: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
ca80: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
ca90: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
caa0: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
cab0: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
cac0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
cad0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51  opcode..**.** SQ
cae0: 4c 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  L functions are 
caf0: 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20  initially coded 
cb00: 61 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20  as OP_Function0 
cb10: 77 69 74 68 20 50 34 20 70 6f 69 6e 74 69 6e 67  with P4 pointing
cb20: 0a 2a 2a 20 74 6f 20 61 20 46 75 6e 63 44 65 66  .** to a FuncDef
cb30: 20 6f 62 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e   object.  But on
cb40: 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f   first evaluatio
cb50: 6e 2c 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  n, the P4 operan
cb60: 64 20 69 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  d is.** automati
cb70: 63 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  cally converted 
cb80: 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  into an sqlite3_
cb90: 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 61  context object a
cba0: 6e 64 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  nd the operation
cbb0: 0a 2a 2a 20 63 68 61 6e 67 65 64 20 74 6f 20 74  .** changed to t
cbc0: 68 69 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20  his OP_Function 
cbd0: 6f 70 63 6f 64 65 2e 20 20 49 6e 20 74 68 69 73  opcode.  In this
cbe0: 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61   way, the initia
cbf0: 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  lization of.** t
cc00: 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
cc10: 78 74 20 6f 62 6a 65 63 74 20 6f 63 63 75 72 73  xt object occurs
cc20: 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68   only once, rath
cc30: 65 72 20 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72  er than once for
cc40: 20 65 61 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74   each.** evaluat
cc50: 69 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ion of the funct
cc60: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
cc70: 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20  lso: Function0, 
cc80: 41 67 67 53 74 65 70 2c 20 41 67 67 46 69 6e 61  AggStep, AggFina
cc90: 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e  l.*/.case OP_Fun
cca0: 63 74 69 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20  ction0: {.  int 
ccb0: 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  n;.  sqlite3_con
ccc0: 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61  text *pCtx;..  a
ccd0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
cce0: 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
ccf0: 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ;.  n = pOp->p5;
cd00: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
cd10: 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
cd20: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
cd30: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
cd40: 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
cd50: 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
cd60: 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  +n<=(p->nMem-p->
cd70: 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
cd80: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
cd90: 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
cda0: 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
cdb0: 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74  ;.  pCtx = sqlit
cdc0: 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
cdd0: 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20  , sizeof(*pCtx) 
cde0: 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73  + (n-1)*sizeof(s
cdf0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b  qlite3_value*));
ce00: 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29  .  if( pCtx==0 )
ce10: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
ce20: 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 30 3b 0a  pCtx->pOut = 0;.
ce30: 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20    pCtx->pFunc = 
ce40: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
ce50: 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e   pCtx->iOp = (in
ce60: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
ce70: 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70   pCtx->pVdbe = p
ce80: 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d  ;.  pCtx->argc =
ce90: 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70   n;.  pOp->p4typ
cea0: 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a  e = P4_FUNCCTX;.
ceb0: 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d    pOp->p4.pCtx =
cec0: 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70   pCtx;.  pOp->op
ced0: 63 6f 64 65 20 3d 20 4f 50 5f 46 75 6e 63 74 69  code = OP_Functi
cee0: 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  on;.  /* Fall th
cef0: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 46 75  rough into OP_Fu
cf00: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a 63 61 73 65  nction */.}.case
cf10: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
cf20: 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
cf30: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
cf40: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
cf50: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
cf60: 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d  CCTX );.  pCtx =
cf70: 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 0a   pOp->p4.pCtx;..
cf80: 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e    /* If this fun
cf90: 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20  ction is inside 
cfa0: 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68  of a trigger, th
cfb0: 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
cfc0: 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20   in aMem[].  ** 
cfd0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f  might change fro
cfe0: 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e  m one evaluation
cff0: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54   to the next.  T
d000: 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
d010: 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b   code.  ** check
d020: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
d030: 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 68  register array h
d040: 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20  as changed, and 
d050: 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65  if so it.  ** re
d060: 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20  initializes the 
d070: 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f  relavant parts o
d080: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  f the sqlite3_co
d090: 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a  ntext object */.
d0a0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
d0b0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70  Op->p3];.  if( p
d0c0: 43 74 78 2d 3e 70 4f 75 74 20 21 3d 20 70 4f 75  Ctx->pOut != pOu
d0d0: 74 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70  t ){.    pCtx->p
d0e0: 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 20 20 20 20  Out = pOut;.    
d0f0: 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63  for(i=pCtx->argc
d100: 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70  -1; i>=0; i--) p
d110: 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26  Ctx->argv[i] = &
d120: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b  aMem[pOp->p2+i];
d130: 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41 62 6f 75 74  .  }..  memAbout
d140: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 43 74 78  ToChange(p, pCtx
d150: 2d 3e 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20  ->pOut);.#ifdef 
d160: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
d170: 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e  or(i=0; i<pCtx->
d180: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
d190: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
d1a0: 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  id(pCtx->argv[i]
d1b0: 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
d1c0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
d1d0: 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  i, pCtx->argv[i]
d1e0: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  );.  }.#endif.  
d1f0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d200: 43 74 78 2d 3e 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Ctx->pOut, MEM_N
d210: 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 66 45  ull);.  pCtx->fE
d220: 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
d230: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
d240: 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a   lastRowid;.  (*
d250: 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46  pCtx->pFunc->xSF
d260: 75 6e 63 29 28 70 43 74 78 2c 20 70 43 74 78 2d  unc)(pCtx, pCtx-
d270: 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e 61 72 67  >argc, pCtx->arg
d280: 76 29 3b 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  v);/* IMP: R-245
d290: 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61  05-23230 */.  la
d2a0: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
d2b0: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d  stRowid;  /* Rem
d2c0: 65 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e  ember rowid chan
d2d0: 67 65 73 20 6d 61 64 65 20 62 79 20 78 53 46 75  ges made by xSFu
d2e0: 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74  nc */..  /* If t
d2f0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
d300: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
d310: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
d320: 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  n */.  if( pCtx-
d330: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a  >fErrorOrAux ){.
d340: 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73      if( pCtx->is
d350: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73  Error ){.      s
d360: 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
d370: 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
d380: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78  _value_text(pCtx
d390: 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20  ->pOut));.      
d3a0: 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72  rc = pCtx->isErr
d3b0: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
d3c0: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
d3d0: 75 78 44 61 74 61 28 70 2c 20 70 43 74 78 2d 3e  uxData(p, pCtx->
d3e0: 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  iOp, pOp->p1);. 
d3f0: 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68   }..  /* Copy th
d400: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
d410: 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65  function into re
d420: 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 69  gister P3 */.  i
d430: 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  f( pOut->flags &
d440: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
d450: 6f 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ob) ){.    sqlit
d460: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
d470: 64 69 6e 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c  ding(pCtx->pOut,
d480: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d490: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
d4a0: 65 6d 54 6f 6f 42 69 67 28 70 43 74 78 2d 3e 70  emTooBig(pCtx->p
d4b0: 4f 75 74 29 20 29 20 67 6f 74 6f 20 74 6f 6f 5f  Out) ) goto too_
d4c0: 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49  big;.  }..  REGI
d4d0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
d4e0: 70 33 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b  p3, pCtx->pOut);
d4f0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
d500: 4f 42 53 49 5a 45 28 70 43 74 78 2d 3e 70 4f 75  OBSIZE(pCtx->pOu
d510: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d520: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e  /* Opcode: BitAn
d530: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
d540: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
d550: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
d560: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
d570: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
d580: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
d590: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
d5a0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
d5b0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d5c0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d5d0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d5e0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d5f0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
d600: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
d610: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d620: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d630: 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]|r[P2].**.** Ta
d640: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d650: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
d660: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d670: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
d680: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
d690: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
d6a0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
d6b0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
d6c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
d6d0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
d6e0: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
d6f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d700: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72    r[P3]=r[P2]<<r
d710: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
d720: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
d730: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d740: 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79  2 to the left by
d750: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d760: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d770: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d780: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d790: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d7a0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d7b0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d7c0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d7d0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d7e0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d7f0: 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20  : ShiftRight P1 
d800: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
d810: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
d820: 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P2]>>r[P1].**.**
d830: 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67   Shift the integ
d840: 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  er value in regi
d850: 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 72  ster P2 to the r
d860: 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  ight by the.** n
d870: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
d880: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
d890: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
d8a0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
d8b0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
d8c0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
d8d0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
d8e0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
d8f0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  t is NULL..*/.ca
d900: 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20  se OP_BitAnd:   
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d920: 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41   same as TK_BITA
d930: 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  ND, in1, in2, ou
d940: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  t3 */.case OP_Bi
d950: 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20 20  tOr:            
d960: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d970: 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20   TK_BITOR, in1, 
d980: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
d990: 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20  e OP_ShiftLeft: 
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d9b0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46  same as TK_LSHIF
d9c0: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
d9d0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69  3 */.case OP_Shi
d9e0: 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20  ftRight: {      
d9f0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
da00: 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20  TK_RSHIFT, in1, 
da10: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
da20: 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b  64 iA;.  u64 uA;
da30: 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20  .  i64 iB;.  u8 
da40: 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  op;..  pIn1 = &a
da50: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
da60: 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
da70: 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p2];.  pOut = 
da80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
da90: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
daa0: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
dab0: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
dac0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
dad0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
dae0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
daf0: 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64    iA = sqlite3Vd
db00: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
db10: 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33  ;.  iB = sqlite3
db20: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
db30: 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e  1);.  op = pOp->
db40: 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70  opcode;.  if( op
db50: 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20  ==OP_BitAnd ){. 
db60: 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d     iA &= iB;.  }
db70: 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  else if( op==OP_
db80: 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20  BitOr ){.    iA 
db90: 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  |= iB;.  }else i
dba0: 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20  f( iB!=0 ){.    
dbb0: 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53  assert( op==OP_S
dbc0: 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d  hiftRight || op=
dbd0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b  =OP_ShiftLeft );
dbe0: 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66  ..    /* If shif
dbf0: 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69  ting by a negati
dc00: 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74  ve amount, shift
dc10: 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69   in the other di
dc20: 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  rection */.    i
dc30: 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20  f( iB<0 ){.     
dc40: 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66   assert( OP_Shif
dc50: 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74  tRight==OP_Shift
dc60: 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20  Left+1 );.      
dc70: 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c  op = 2*OP_ShiftL
dc80: 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20  eft + 1 - op;.  
dc90: 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34      iB = iB>(-64
dca0: 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20  ) ? -iB : 64;.  
dcb0: 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e    }..    if( iB>
dcc0: 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20  =64 ){.      iA 
dcd0: 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d  = (iA>=0 || op==
dce0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20  OP_ShiftLeft) ? 
dcf0: 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73  0 : -1;.    }els
dd00: 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28  e{.      memcpy(
dd10: 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66  &uA, &iA, sizeof
dd20: 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28  (uA));.      if(
dd30: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
dd40: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20  t ){.        uA 
dd50: 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65  <<= iB;.      }e
dd60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20  lse{.        uA 
dd70: 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20  >>= iB;.        
dd80: 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f  /* Sign-extend o
dd90: 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74 20  n a right shift 
dda0: 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75  of a negative nu
ddb0: 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  mber */.        
ddc0: 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d  if( iA<0 ) uA |=
ddd0: 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66 66   ((((u64)0xfffff
dde0: 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66  fff)<<32)|0xffff
ddf0: 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29  ffff) << (64-iB)
de00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
de10: 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c  memcpy(&iA, &uA,
de20: 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20   sizeof(iA));.  
de30: 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e    }.  }.  pOut->
de40: 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53  u.i = iA;.  MemS
de50: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
de60: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
de70: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
de80: 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20  : AddImm  P1 P2 
de90: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
dea0: 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b  s:  r[P1]=r[P1]+
deb0: 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68  P2.** .** Add th
dec0: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
ded0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
dee0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
def0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
df00: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
df10: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
df20: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
df30: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
df40: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
df50: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
df60: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
df70: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
df80: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
df90: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
dfa0: 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  , pIn1);.  sqlit
dfb0: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
dfc0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
dfd0: 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
dfe0: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
dff0: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
e000: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
e010: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
e020: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e030: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
e040: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
e050: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e060: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
e070: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
e080: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
e090: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
e0a0: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
e0b0: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
e0c0: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
e0d0: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
e0e0: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
e0f0: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
e100: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
e110: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
e120: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
e130: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
e140: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
e150: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
e160: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
e170: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
e180: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
e190: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
e1a0: 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72  ing);.    VdbeBr
e1b0: 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d  anchTaken((pIn1-
e1c0: 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d  >flags&MEM_Int)=
e1d0: 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
e1e0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
e1f0: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
e200: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
e210: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
e220: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
e230: 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  CH;.        goto
e240: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
e250: 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ror;.      }else
e260: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a  {.        goto j
e270: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
e280: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d   }.    }.  }.  M
e290: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
e2a0: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
e2b0: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
e2c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
e2d0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
e2e0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
e2f0: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
e300: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
e310: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
e320: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
e330: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
e340: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
e350: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
e360: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
e370: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
e380: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
e390: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
e3a0: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
e3b0: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
e3c0: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
e3d0: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
e3e0: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
e3f0: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
e400: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
e410: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
e420: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
e430: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
e440: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
e450: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
e460: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e470: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e480: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
e490: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
e4a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
e4b0: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
e4c0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
e4d0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
e4e0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
e4f0: 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31   Opcode: Cast P1
e500: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
e510: 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
e520: 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72  r[P1]).**.** For
e530: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
e540: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
e550: 65 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e  e the type defin
e560: 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a  ed by P2..** .**
e570: 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c   <ul>.** <li val
e580: 75 65 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a  ue="97"> TEXT.**
e590: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e   <li value="98">
e5a0: 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c   BLOB.** <li val
e5b0: 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43  ue="99"> NUMERIC
e5c0: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31  .** <li value="1
e5d0: 30 30 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20  00"> INTEGER.** 
e5e0: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e  <li value="101">
e5f0: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
e600: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
e610: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
e620: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
e630: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
e640: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
e650: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
e660: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
e670: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
e680: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
e690: 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c  BLOB && pOp->p2<
e6a0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
e6b0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e6c0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e6d0: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
e6e0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
e6f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
e700: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e710: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e720: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
e730: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
e740: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
e750: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
e760: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e770: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
e780: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
e790: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
e7a0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
e7b0: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
e7c0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
e7d0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
e7e0: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
e7f0: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
e800: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
e810: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62  BSIZE(pIn1);.  b
e820: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
e830: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
e840: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
e850: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
e860: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e870: 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20   if r[P1]<r[P3] 
e880: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f  goto P2.**.** Co
e890: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
e8a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
e8b0: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
e8c0: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
e8d0: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
e8e0: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
e8f0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
e900: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
e910: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
e920: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
e930: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
e940: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
e950: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
e960: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
e970: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
e980: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
e990: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
e9a0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
e9b0: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
e9c0: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
e9d0: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
e9e0: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
e9f0: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
ea00: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
ea10: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
ea20: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
ea30: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
ea40: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
ea50: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
ea60: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
ea70: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
ea80: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
ea90: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
eaa0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
eab0: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
eac0: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
ead0: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
eae0: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
eaf0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
eb00: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
eb10: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
eb20: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
eb30: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
eb40: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
eb50: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
eb60: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
eb70: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
eb80: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
eb90: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
eba0: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
ebb0: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
ebc0: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
ebd0: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
ebe0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
ebf0: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
ec00: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
ec10: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
ec20: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
ec30: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
ec40: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
ec50: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
ec60: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
ec70: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
ec80: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
ec90: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
eca0: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
ecb0: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
ecc0: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
ecd0: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
ece0: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
ecf0: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
ed00: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ed10: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
ed20: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
ed30: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
ed40: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
ed50: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
ed60: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
ed70: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
ed80: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
ed90: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
eda0: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
edb0: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
edc0: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
edd0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
ede0: 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35  TOREP2 bit of P5
edf0: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f   is set, then do
ee00: 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74   not jump.  Inst
ee10: 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20  ead,.** store a 
ee20: 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28  boolean result (
ee30: 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20  either 0, or 1, 
ee40: 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69  or NULL) in regi
ee50: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
ee60: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  f the SQLITE_NUL
ee70: 4c 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69  LEQ bit is set i
ee80: 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20  n P5, then NULL 
ee90: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
eea0: 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74  dered.** equal t
eeb0: 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70  o one another, p
eec0: 72 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65  rovided that the
eed0: 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68  y do not have th
eee0: 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a  eir MEM_Cleared.
eef0: 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f  ** bit set..*/./
ef00: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
ef10: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
ef20: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
ef30: 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]!=r[P3] goto P2
ef40: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ef50: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ef60: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ef70: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
ef80: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ef90: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
efa0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
efb0: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
efc0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
efd0: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
efe0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
eff0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
f000: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
f010: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
f020: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
f030: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
f040: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
f050: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
f060: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
f070: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
f080: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
f090: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
f0a0: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
f0b0: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
f0c0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
f0d0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
f0e0: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
f0f0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f100: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
f110: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
f120: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
f130: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
f140: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
f150: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
f160: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
f170: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f180: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
f190: 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ==r[P3] goto P2.
f1a0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f1b0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f1c0: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f1d0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f1e0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f1f0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
f200: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f210: 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53   are equal..** S
f220: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f230: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f240: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
f250: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
f260: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
f270: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f280: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
f290: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
f2a0: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
f2b0: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
f2c0: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
f2d0: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
f2e0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
f2f0: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
f300: 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74  is true.  If eit
f310: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f320: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
f330: 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  ult is false..**
f340: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
f350: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
f360: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
f370: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
f380: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
f390: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
f3a0: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
f3b0: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
f3c0: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
f3d0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f3e0: 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33  : if r[P1]<=r[P3
f3f0: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f400: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f410: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f420: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f430: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f440: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f450: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f460: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
f470: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
f480: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
f490: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
f4a0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
f4b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
f4c0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
f4d0: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
f4e0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f4f0: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72  psis: if r[P1]>r
f500: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f510: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f520: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f530: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f540: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f550: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f560: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f570: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
f580: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
f590: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f5a0: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f5b0: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f5c0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f5d0: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
f5e0: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
f5f0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f600: 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20  if r[P1]>=r[P3] 
f610: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
f620: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
f630: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
f640: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
f650: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
f660: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
f670: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
f680: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
f690: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
f6a0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
f6b0: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
f6c0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
f6d0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
f6e0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
f6f0: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
f700: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f710: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
f720: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
f730: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
f740: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f750: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
f760: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
f770: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
f780: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f790: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
f7a0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
f7b0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
f7c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
f7d0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
f7e0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f800: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
f810: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f820: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f840: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
f850: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f860: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
f870: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
f880: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
f890: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
f8a0: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
f8b0: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
f8c0: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
f8d0: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
f8e0: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
f8f0: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
f900: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
f910: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
f920: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
f930: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
f940: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
f950: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
f960: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
f970: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
f980: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
f990: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
f9a0: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
f9b0: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
f9c0: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
f9d0: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
f9e0: 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
f9f0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
fa00: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
fa10: 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
fa20: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
fa30: 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
fa40: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
fa50: 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
fa60: 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
fa70: 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
fa80: 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
fa90: 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
faa0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
fab0: 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
fac0: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
fad0: 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
fae0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
faf0: 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
fb00: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
fb10: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
fb20: 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
fb30: 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61  OP_Ne );.      a
fb40: 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26  ssert( (flags1 &
fb50: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30   MEM_Cleared)==0
fb60: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
fb70: 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  ( (pOp->p5 & SQL
fb80: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d  ITE_JUMPIFNULL)=
fb90: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
fba0: 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c  (flags1&MEM_Null
fbb0: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
fbc0: 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
fbd0: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
fbe0: 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
fbf0: 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
fc00: 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
fc10: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
fc20: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
fc30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
fc40: 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 1;  /* Resul
fc50: 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ts are not equal
fc60: 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
fc70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
fc80: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
fc90: 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
fca0: 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
fcb0: 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
fcc0: 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
fcd0: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
fce0: 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
fcf0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
fd00: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
fd10: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
fd20: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
fd30: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
fd40: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
fd50: 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
fd60: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
fd70: 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
fd80: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
fd90: 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  );.        MemSe
fda0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
fdb0: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
fdc0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
fdd0: 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
fde0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
fdf0: 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
fe00: 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20  hTaken(2,3);.   
fe10: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
fe20: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
fe30: 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  NULL ){.        
fe40: 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
fe50: 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
fe60: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
fe70: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
fe80: 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
fe90: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
fea0: 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
feb0: 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
fec0: 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
fed0: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
fee0: 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
fef0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
ff00: 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66  ERIC ){.      if
ff10: 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d  ( (flags1 & (MEM
ff20: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
ff30: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
ff40: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c   ){.        appl
ff50: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
ff60: 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn1,0);.      
ff70: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  }.      if( (fla
ff80: 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
ff90: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
ffa0: 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
ffb0: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
ffc0: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
ffd0: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
ffe0: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
fff0: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
10000 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28  EXT ){.      if(
10010 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53   (flags1 & MEM_S
10020 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
10030 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
10040 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
10050 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10060 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10070 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10080 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10090 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
100a0 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
100b0 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
100c0 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
100d0 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  ing, 1);.       
100e0 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67   testcase( (flag
100f0 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28  s1&MEM_Dyn) != (
10100 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
10110 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Dyn) );.        
10120 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e  flags1 = (pIn1->
10130 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70  flags & ~MEM_Typ
10140 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31  eMask) | (flags1
10150 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29   & MEM_TypeMask)
10160 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
10170 69 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45  if( (flags3 & ME
10180 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c  M_Str)==0 && (fl
10190 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags3 & (MEM_Int|
101a0 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
101b0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
101c0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
101d0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
101e0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
101f0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10200 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
10210 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
10220 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e  ringify(pIn3, en
10230 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
10240 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66      testcase( (f
10250 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21  lags3&MEM_Dyn) !
10260 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  = (pIn3->flags&M
10270 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20  EM_Dyn) );.     
10280 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e     flags3 = (pIn
10290 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  3->flags & ~MEM_
102a0 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
102b0 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61  gs3 & MEM_TypeMa
102c0 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  sk);.      }.   
102d0 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70   }.    assert( p
102e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
102f0 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70  OLLSEQ || pOp->p
10300 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20  4.pColl==0 );.  
10310 20 20 69 66 28 20 66 6c 61 67 73 31 20 26 20 4d    if( flags1 & M
10320 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
10330 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
10340 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
10350 0a 20 20 20 20 20 20 66 6c 61 67 73 31 20 26 3d  .      flags1 &=
10360 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20   ~MEM_Zero;.    
10370 7d 0a 20 20 20 20 69 66 28 20 66 6c 61 67 73 33  }.    if( flags3
10380 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
10390 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
103a0 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  MemExpandBlob(pI
103b0 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73  n3);.      flags
103c0 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a  3 &= ~MEM_Zero;.
103d0 20 20 20 20 7d 0a 20 20 20 20 72 65 73 20 3d 20      }.    res = 
103e0 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
103f0 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f  e(pIn3, pIn1, pO
10400 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20  p->p4.pColl);.  
10410 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d  }.  switch( pOp-
10420 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63  >opcode ){.    c
10430 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65  ase OP_Eq:    re
10440 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20  s = res==0;     
10450 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
10460 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Ne:    res = 
10470 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61  res!=0;     brea
10480 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
10490 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c  t:    res = res<
104a0 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
104b0 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20     case OP_Le:  
104c0 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20    res = res<=0; 
104d0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
104e0 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65  ase OP_Gt:    re
104f0 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20  s = res>0;      
10500 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
10510 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20  lt:       res = 
10520 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61  res>=0;     brea
10530 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64  k;.  }..  /* Und
10540 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61  o any changes ma
10550 64 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e  de by applyAffin
10560 69 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70  ity() to the inp
10570 75 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f  ut registers. */
10580 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
10590 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79  ->flags & MEM_Dy
105a0 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20  n) == (flags1 & 
105b0 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49  MEM_Dyn) );.  pI
105c0 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67  n1->flags = flag
105d0 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  s1;.  assert( (p
105e0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
105f0 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33  _Dyn) == (flags3
10600 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10610 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn3->flags = f
10620 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f  lags3;..  if( pO
10630 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
10640 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f  TOREP2 ){.    pO
10650 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
10660 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  p2];.    memAbou
10670 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
10680 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
10690 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
106a0 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
106b0 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20  >u.i = res;.    
106c0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
106d0 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
106e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
106f0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
10700 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  =0, (pOp->p5 & S
10710 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a  QLITE_NULLEQ)?2:
10720 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  3);.    if( res 
10730 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  ){.      goto ju
10740 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
10750 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
10760 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
10770 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
10780 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
10790 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
107a0 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
107b0 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
107c0 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
107d0 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
107e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
107f0 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
10800 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
10810 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
10820 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
10830 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10840 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
10850 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
10860 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
10870 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
10880 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
10890 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
108a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74  .**.** The first
108b0 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20   integer in the 
108c0 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79  P4 integer array
108d0 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f   is the length o
108e0 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61  f the array.** a
108f0 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f  nd does not beco
10900 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  me part of the p
10910 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  ermutation..*/.c
10920 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ase OP_Permutati
10930 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  on: {.  assert( 
10940 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
10950 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73  INTARRAY );.  as
10960 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69  sert( pOp->p4.ai
10970 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d   );.  aPermute =
10980 20 70 4f 70 2d 3e 70 34 2e 61 69 20 2b 20 31 3b   pOp->p4.ai + 1;
10990 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
109a0 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
109b0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
109c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
109d0 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33  @P3] <-> r[P2@P3
109e0 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  ].**.** Compare 
109f0 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72  two vectors of r
10a00 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
10a10 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
10a20 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20  ) (call this.** 
10a30 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20  vector "A") and 
10a40 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
10a50 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
10a60 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
10a70 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
10a80 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
10a90 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
10aa0 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
10ab0 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
10ac0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
10ad0 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
10ae0 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72   order of compar
10af0 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72  ison is.** deter
10b00 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73  mined by the mos
10b10 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d  t recent OP_Perm
10b20 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  utation operator
10b30 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46  .  If the.** OPF
10b40 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
10b50 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
10b60 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70  egister are comp
10b70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69  ared in sequenti
10b80 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a  al.** order..**.
10b90 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e  ** P4 is a KeyIn
10ba0 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
10bb0 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74  t defines collat
10bc0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e  ing sequences an
10bd0 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73  d sort.** orders
10be0 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69   for the compari
10bf0 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  son.  The permut
10c00 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f  ation applies to
10c10 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e   registers.** on
10c20 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  ly.  The KeyInfo
10c30 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73   elements are us
10c40 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e  ed sequentially.
10c50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61  .**.** The compa
10c60 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20  rison is a sort 
10c70 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e  comparison, so N
10c80 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ULLs compare equ
10c90 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65  al,.** NULLs are
10ca0 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65   less than numbe
10cb0 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20  rs, numbers are 
10cc0 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67  less than string
10cd0 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67  s,.** and string
10ce0 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
10cf0 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  blobs..*/.case O
10d00 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69  P_Compare: {.  i
10d10 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
10d20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70   int p1;.  int p
10d30 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e  2;.  const KeyIn
10d40 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
10d50 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53  int idx;.  CollS
10d60 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
10d70 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
10d80 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
10d90 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74  is term */.  int
10da0 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20   bRev;          
10db0 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
10dc0 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65  ENDING sort orde
10dd0 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  r */..  if( (pOp
10de0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
10df0 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72  RMUTE)==0 ) aPer
10e00 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20  mute = 0;.  n = 
10e10 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49  pOp->p3;.  pKeyI
10e20 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
10e30 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74  eyInfo;.  assert
10e40 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  ( n>0 );.  asser
10e50 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29  t( pKeyInfo!=0 )
10e60 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ;.  p1 = pOp->p1
10e70 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
10e80 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42  ;.#if SQLITE_DEB
10e90 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
10ea0 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
10eb0 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
10ec0 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
10ed0 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
10ee0 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
10ef0 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
10f00 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
10f10 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
10f20 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
10f30 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
10f40 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  2+mx<=(p->nMem-p
10f50 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10f60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
10f70 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b  ert( p1>0 && p1+
10f80 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  n<=(p->nMem-p->n
10f90 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
10fa0 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
10fb0 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d   p2+n<=(p->nMem-
10fc0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10fd0 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
10fe0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
10ff0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
11000 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
11010 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
11020 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
11030 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
11040 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
11050 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11060 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
11070 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
11080 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11090 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
110a0 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
110b0 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
110c0 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
110d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
110e0 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c  <pKeyInfo->nFiel
110f0 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d  d );.    pColl =
11100 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c   pKeyInfo->aColl
11110 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20  [i];.    bRev = 
11120 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f  pKeyInfo->aSortO
11130 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f  rder[i];.    iCo
11140 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d  mpare = sqlite3M
11150 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b  emCompare(&aMem[
11160 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70  p1+idx], &aMem[p
11170 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a  2+idx], pColl);.
11180 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65      if( iCompare
11190 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52   ){.      if( bR
111a0 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20  ev ) iCompare = 
111b0 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20  -iCompare;.     
111c0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
111d0 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30  }.  aPermute = 0
111e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
111f0 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31   Opcode: Jump P1
11200 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
11210 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73   Jump to the ins
11220 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72  truction at addr
11230 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50  ess P1, P2, or P
11240 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  3 depending on w
11250 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65  hether.** in the
11260 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
11270 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74  Compare instruct
11280 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f  ion the P1 vecto
11290 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a  r was less than.
112a0 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20  ** equal to, or 
112b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
112c0 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70   P2 vector, resp
112d0 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73  ectively..*/.cas
112e0 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20  e OP_Jump: {    
112f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
11300 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61   */.  if( iCompa
11310 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64 62 65  re<0 ){.    Vdbe
11320 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29  BranchTaken(0,3)
11330 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
11340 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p1 - 1];.  }el
11350 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d  se if( iCompare=
11360 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  =0 ){.    VdbeBr
11370 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20  anchTaken(1,3); 
11380 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
11390 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65  p2 - 1];.  }else
113a0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
113b0 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20  Taken(2,3); pOp 
113c0 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d  = &aOp[pOp->p3 -
113d0 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1];.  }.  break
113e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
113f0 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
11400 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11410 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b  P3]=(r[P1] && r[
11420 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
11430 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20  the logical AND 
11440 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
11450 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
11460 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74  d P2 and.** writ
11470 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74  e the result int
11480 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
11490 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
114a0 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61  1 or P2 is 0 (fa
114b0 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  lse) then the re
114c0 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69  sult is 0 even i
114d0 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69  f.** the other i
114e0 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41  nput is NULL.  A
114f0 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f   NULL and true o
11500 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65  r two NULLs give
11510 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  .** a NULL outpu
11520 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
11530 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a   Or P1 P2 P3 * *
11540 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11550 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b  P3]=(r[P1] || r[
11560 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  P2]).**.** Take 
11570 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f  the logical OR o
11580 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
11590 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
115a0 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
115b0 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65  the answer in re
115c0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
115d0 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
115e0 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28   P2 is nonzero (
115f0 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72  true) then the r
11600 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65  esult is 1 (true
11610 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65  ).** even if the
11620 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20   other input is 
11630 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e  NULL.  A NULL an
11640 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e  d false or two N
11650 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e  ULLs.** give a N
11660 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63  ULL output..*/.c
11670 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20  ase OP_And:     
11680 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
11690 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c   as TK_AND, in1,
116a0 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
116b0 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20  se OP_Or: {     
116c0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
116d0 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69  as TK_OR, in1, i
116e0 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e  n2, out3 */.  in
116f0 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74  t v1;    /* Left
11700 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41   operand:  0==FA
11710 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d  LSE, 1==TRUE, 2=
11720 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c  =UNKNOWN or NULL
11730 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20   */.  int v2;   
11740 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e   /* Right operan
11750 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d  d: 0==FALSE, 1==
11760 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e  TRUE, 2==UNKNOWN
11770 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70   or NULL */..  p
11780 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
11790 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
117a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
117b0 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32  ll ){.    v1 = 2
117c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76  ;.  }else{.    v
117d0 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  1 = sqlite3VdbeI
117e0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
117f0 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26  ;.  }.  pIn2 = &
11800 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
11810 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73   if( pIn2->flags
11820 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
11830 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c     v2 = 2;.  }el
11840 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c  se{.    v2 = sql
11850 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
11860 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20  (pIn2)!=0;.  }. 
11870 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
11880 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20  ==OP_And ){.    
11890 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
118a0 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c  igned char and_l
118b0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c  ogic[] = { 0, 0,
118c0 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20   0, 0, 1, 2, 0, 
118d0 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  2, 2 };.    v1 =
118e0 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b   and_logic[v1*3+
118f0 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  v2];.  }else{.  
11900 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
11910 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f  nsigned char or_
11920 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31  logic[] = { 0, 1
11930 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c  , 2, 1, 1, 1, 2,
11940 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   1, 2 };.    v1 
11950 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b  = or_logic[v1*3+
11960 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20  v2];.  }.  pOut 
11970 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
11980 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b  ;.  if( v1==2 ){
11990 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
119a0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
119b0 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ll);.  }else{.  
119c0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31    pOut->u.i = v1
119d0 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
119e0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
119f0 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  nt);.  }.  break
11a00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
11a10 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
11a20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11a30 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  2]= !r[P1].**.**
11a40 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76   Interpret the v
11a50 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11a60 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 as a boolean
11a70 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74   value.  Store t
11a80 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f  he.** boolean co
11a90 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69  mplement in regi
11aa0 73 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65  ster P2.  If the
11ab0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11ac0 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c  er P1 is .** NUL
11ad0 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69  L, then a NULL i
11ae0 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a  s stored in P2..
11af0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20  */.case OP_Not: 
11b00 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
11b10 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
11b20 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
11b30 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
11b40 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
11b50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
11b60 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
11b70 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
11b80 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
11b90 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11ba0 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ==0 ){.    pOut-
11bb0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
11bc0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
11bd0 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e  = !sqlite3VdbeIn
11be0 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
11bf0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11c00 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
11c10 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
11c20 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20  ynopsis: r[P1]= 
11c30 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  ~r[P1].**.** Int
11c40 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65  erpret the conte
11c50 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
11c60 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  1 as an integer.
11c70 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f    Store the.** o
11c80 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f  nes-complement o
11c90 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
11ca0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
11cb0 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a    If P1 holds.**
11cc0 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f   a NULL then sto
11cd0 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e  re a NULL in P2.
11ce0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e  .*/.case OP_BitN
11cf0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
11d00 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11d10 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  BITNOT, in1, out
11d20 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
11d30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11d40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11d50 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
11d60 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
11d70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
11d80 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11d90 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
11da0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
11db0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
11dc0 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64  u.i = ~sqlite3Vd
11dd0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11de0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11df0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63  ../* Opcode: Onc
11e00 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
11e10 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 22 6f  .** Check the "o
11e20 6e 63 65 22 20 66 6c 61 67 20 6e 75 6d 62 65 72  nce" flag number
11e30 20 50 31 2e 20 49 66 20 69 74 20 69 73 20 73 65   P1. If it is se
11e40 74 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  t, jump to instr
11e50 75 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f  uction P2. .** O
11e60 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 68  therwise, set th
11e70 65 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20  e flag and fall 
11e80 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
11e90 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
11ea0 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
11eb0 64 73 2c 20 74 68 69 73 20 6f 70 63 6f 64 65 20  ds, this opcode 
11ec0 63 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f  causes all follo
11ed0 77 69 6e 67 20 6f 70 63 6f 64 65 73 20 75 70 20  wing opcodes up 
11ee0 74 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62  through P2.** (b
11ef0 75 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67  ut not including
11f00 20 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73 74   P2) to run just
11f10 20 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62 65 20   once and to be 
11f20 73 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65  skipped on subse
11f30 71 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74  quent.** times t
11f40 68 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e  hrough the loop.
11f50 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65  .**.** All "once
11f60 22 20 66 6c 61 67 73 20 61 72 65 20 69 6e 69 74  " flags are init
11f70 69 61 6c 6c 79 20 63 6c 65 61 72 65 64 20 77 68  ially cleared wh
11f80 65 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65  enever a prepare
11f90 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66  d statement.** f
11fa0 69 72 73 74 20 62 65 67 69 6e 73 20 74 6f 20 72  irst begins to r
11fb0 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  un..*/.case OP_O
11fc0 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
11fd0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
11fe0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
11ff0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a  p->nOnceFlag );.
12000 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
12010 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70  n(p->aOnceFlag[p
12020 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a  Op->p1]!=0, 2);.
12030 20 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c    if( p->aOnceFl
12040 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20  ag[pOp->p1] ){. 
12050 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
12060 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
12070 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f   p->aOnceFlag[pO
12080 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a  p->p1] = 1;.  }.
12090 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
120a0 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20  pcode: If P1 P2 
120b0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
120c0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
120d0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
120e0 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68   P1 is true.  Th
120f0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
12100 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66  nsidered true if
12110 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61   it is numeric a
12120 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66  nd non-zero.  If
12130 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
12140 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
12150 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
12160 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33  f and only if P3
12170 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
12180 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
12190 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
121a0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
121b0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
121c0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46  register P1 is F
121d0 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alse.  The value
121e0 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
121f0 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61  d false if it ha
12200 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
12210 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74  e of zero.  If t
12220 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
12230 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
12240 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
12250 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
12260 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63  s non-zero..*/.c
12270 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20  ase OP_If:      
12280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12290 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20  mp, in1 */.case 
122a0 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20  OP_IfNot: {     
122b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
122c0 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a  in1 */.  int c;.
122d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
122e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
122f0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12300 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d  _Null ){.    c =
12310 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73   pOp->p3;.  }els
12320 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e{.#ifdef SQLITE
12330 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
12340 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c  OINT.    c = sql
12350 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
12360 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65  (pIn1)!=0;.#else
12370 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
12380 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
12390 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66  n1)!=0.0;.#endif
123a0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
123b0 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29  code==OP_IfNot )
123c0 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56   c = !c;.  }.  V
123d0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
123e0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
123f0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
12400 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
12410 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12420 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32  de: IsNull P1 P2
12430 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12440 69 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e  is:  if r[P1]==N
12450 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
12460 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
12470 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12480 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
12490 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
124a0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
124b0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
124c0 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
124d0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
124e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
124f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12500 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
12510 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29  MEM_Null)!=0, 2)
12520 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
12530 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12540 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
12550 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
12560 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12570 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
12580 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
12590 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
125a0 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
125b0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
125c0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
125d0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
125e0 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
125f0 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
12600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12610 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
12620 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
12630 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12640 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
12650 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
12660 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12670 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
12680 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
12690 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
126a0 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
126b0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
126c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
126d0 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
126e0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
126f0 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a  sis:  r[P3]=PX.*
12700 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12710 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
12720 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
12730 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
12740 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
12750 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
12760 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
12770 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
12780 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
12790 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
127a0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
127b0 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
127c0 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
127d0 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
127e0 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
127f0 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
12800 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
12810 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
12820 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
12830 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
12840 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
12850 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
12860 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
12870 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
12880 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
12890 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
128a0 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
128b0 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
128c0 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
128d0 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
128e0 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
128f0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
12900 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
12910 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
12920 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
12930 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
12940 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
12950 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
12960 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
12970 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
12980 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
12990 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
129a0 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
129b0 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
129c0 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
129d0 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
129e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
129f0 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
12a00 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
12a10 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
12a20 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
12a30 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
12a40 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
12a50 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
12a60 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
12a70 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   when.** the res
12a80 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
12a90 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
12aa0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
12ab0 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
12ac0 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
12ad0 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
12ae0 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
12af0 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
12b00 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
12b10 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
12b20 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
12b30 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
12b40 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
12b50 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
12b60 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36  P_Column: {.  i6
12b70 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  4 payloadSize64;
12b80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
12b90 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  tes in the recor
12ba0 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20  d */.  int p2;  
12bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
12bc0 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
12bd0 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
12be0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
12bf0 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
12c00 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  r */.  BtCursor 
12c10 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
12c20 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
12c30 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
12c40 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
12c50 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
12c60 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
12c70 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
12c80 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
12c90 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
12ca0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
12cb0 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
12cc0 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
12cd0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
12ce0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
12cf0 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65  er */.  Mem *pDe
12d00 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68  st;        /* Wh
12d10 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ere to write the
12d20 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   extracted value
12d30 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20   */.  Mem sMem; 
12d40 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
12d50 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
12d60 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
12d70 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
12d80 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74  zData;   /* Part
12d90 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
12da0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
12db0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72    const u8 *zHdr
12dc0 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70  ;    /* Next unp
12dd0 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74 68  arsed byte of th
12de0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f  e header */.  co
12df0 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  nst u8 *zEndHdr;
12e00 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
12e10 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
12e20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
12e30 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20  u32 offset;     
12e40 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74     /* Offset int
12e50 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20  o the data */.  
12e60 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20  u64 offset64;   
12e70 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66     /* 64-bit off
12e80 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 61 76 61  set */.  u32 ava
12e90 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
12ea0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
12eb0 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
12ec0 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20   */.  u32 t;    
12ed0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79           /* A ty
12ee0 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  pe code from the
12ef0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a   record header *
12f00 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20  /.  Mem *pReg;  
12f10 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f         /* Pseudo
12f20 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69  Table input regi
12f30 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20  ster */..  pC = 
12f40 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
12f50 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  ];.  p2 = pOp->p
12f60 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  2;..  /* If the 
12f70 63 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20  cursor cache is 
12f80 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20  stale, bring it 
12f90 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20  up-to-date */.  
12fa0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
12fb0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43  CursorMoveto(&pC
12fc0 2c 20 26 70 32 29 3b 0a 0a 20 20 61 73 73 65 72  , &p2);..  asser
12fd0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
12fe0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
12ff0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
13000 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
13010 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
13020 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
13030 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72   pDest);.  asser
13040 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
13050 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
13060 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
13070 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
13080 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c  rt( p2<pC->nFiel
13090 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d  d );.  aOffset =
130a0 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20   pC->aOffset;.  
130b0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
130c0 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54  Type!=CURTYPE_VT
130d0 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AB );.  assert( 
130e0 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
130f0 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20  RTYPE_PSEUDO || 
13100 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
13110 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
13120 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53  rType!=CURTYPE_S
13130 4f 52 54 45 52 20 29 3b 0a 20 20 70 43 72 73 72  ORTER );.  pCrsr
13140 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
13150 72 3b 0a 0a 20 20 69 66 28 20 72 63 20 29 20 67  r;..  if( rc ) g
13160 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
13170 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43  _error;.  if( pC
13180 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d 70  ->cacheStatus!=p
13190 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20  ->cacheCtr ){.  
131a0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
131b0 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  w ){.      if( p
131c0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
131d0 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20  TYPE_PSEUDO ){. 
131e0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
131f0 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  C->uc.pseudoTabl
13200 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20  eReg>0 );.      
13210 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
13220 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  C->uc.pseudoTabl
13230 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61  eReg];.        a
13240 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
13250 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
13260 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13270 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
13280 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ) );.        pC-
13290 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
132a0 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
132b0 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
132c0 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
132d0 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  u8*)pReg->z;.   
132e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
132f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13300 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
13310 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13320 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
13330 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
13340 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
13350 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
13360 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
13370 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
13380 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  );.      if( pC-
13390 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
133a0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
133b0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
133c0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
133d0 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
133e0 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
133f0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
13400 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
13410 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73  e64);.        as
13420 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
13430 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62  _OK ); /* True b
13440 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
13450 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
13460 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f  ove */.        /
13470 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  * sqlite3BtreePa
13480 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65  rseCellPtr() use
13490 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20  s getVarint32() 
134a0 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20  to extract the. 
134b0 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61         ** payloa
134c0 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73  d size, so it is
134d0 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
134e0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f  payloadSize64 to
134f0 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c   be.        ** l
13500 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69  arger than 32 bi
13510 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ts. */.        a
13520 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53  ssert( (payloadS
13530 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d  ize64 & SQLITE_M
13540 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61  AX_U32)==(u64)pa
13550 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20  yloadSize64 );. 
13560 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
13570 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
13580 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  yFetch(pCrsr, &a
13590 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70  vail);.        p
135a0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
135b0 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a   (u32)payloadSiz
135c0 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  e64;.      }else
135d0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
135e0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
135f0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
13600 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56  r) );.        VV
13610 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
13620 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
13630 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61  e(pCrsr, &pC->pa
13640 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
13650 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
13660 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
13670 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e  * DataSize() can
13680 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20  not fail */.    
13690 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
136a0 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46  qlite3BtreeDataF
136b0 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
136c0 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  il);.      }.   
136d0 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c     assert( avail
136e0 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d  <=65536 );  /* M
136f0 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65  aximum page size
13700 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20   is 64KiB */.   
13710 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
13720 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61  adSize <= (u32)a
13730 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  vail ){.        
13740 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e  pC->szRow = pC->
13750 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
13760 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d     }else if( pC-
13770 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28  >payloadSize > (
13780 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
13790 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
137a0 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67  TH] ){.        g
137b0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
137c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
137d0 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76    pC->szRow = av
137e0 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ail;.      }.   
137f0 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65   }.    pC->cache
13800 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
13810 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48  eCtr;.    pC->iH
13820 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61  drOffset = getVa
13830 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c  rint32(pC->aRow,
13840 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43   offset);.    pC
13850 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30  ->nHdrParsed = 0
13860 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d  ;.    aOffset[0]
13870 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20   = offset;...   
13880 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65   if( avail<offse
13890 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43  t ){.      /* pC
138a0 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
138b0 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  have to hold the
138c0 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74   entire row, but
138d0 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73   it does at leas
138e0 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20  t.      ** need 
138f0 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
13900 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72  der of the recor
13910 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20  d.  If pC->aRow 
13920 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
13930 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f  .      ** the co
13940 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74  mplete header, t
13950 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65  hen set it to ze
13960 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20  ro, forcing the 
13970 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20  header to be.   
13980 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c     ** dynamicall
13990 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a  y allocated. */.
139a0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
139b0 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a   0;.      pC->sz
139c0 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  Row = 0;..      
139d0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
139e0 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
139f0 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
13a00 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
13a10 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f  der..      ** Do
13a20 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
13a30 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
13a40 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
13a50 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
13a60 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
13a70 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
13a80 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
13a90 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
13aa0 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74   byte.      ** t
13ab0 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68  ypes use so much
13ac0 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74   data space that
13ad0 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20   there can only 
13ae0 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f  be 4096 and 32 o
13af0 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c  f.      ** them,
13b00 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
13b10 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68  So the maximum h
13b20 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73  eader length res
13b30 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20  ults from a.    
13b40 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65    ** 3-byte type
13b50 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
13b60 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36   maximum of 3276
13b70 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74  8 columns plus t
13b80 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78  hree.      ** ex
13b90 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
13ba0 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
13bb0 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
13bc0 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
13bd0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
13be0 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20   offset > 98307 
13bf0 7c 7c 20 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 20 29 7b 0a 20  payloadSize ){. 
13c10 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
13c20 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
13c30 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
13c40 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
13c50 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
13c60 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
13c70 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70  ng goto is an op
13c80 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20  timization.  It 
13c90 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61  can be omitted a
13ca0 6e 64 0a 20 20 20 20 2a 2a 20 65 76 65 72 79 74  nd.    ** everyt
13cb0 68 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20  hing will still 
13cc0 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f  work.  But OP_Co
13cd0 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62  lumn is measurab
13ce0 6c 79 20 66 61 73 74 65 72 0a 20 20 20 20 2a 2a  ly faster.    **
13cf0 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68 65   by skipping the
13d00 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e 64   subsequent cond
13d10 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20 69  itional, which i
13d20 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 20  s always true.. 
13d30 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
13d40 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
13d50 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20  <=p2 );         
13d60 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73  /* Conditional s
13d70 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 67 6f  kipped */.    go
13d80 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61  to op_column_rea
13d90 64 5f 68 65 61 64 65 72 3b 0a 20 20 7d 0a 0a 20  d_header;.  }.. 
13da0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
13db0 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
13dc0 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
13dd0 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
13de0 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
13df0 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
13e00 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
13e10 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
13e20 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
13e30 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
13e40 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
13e50 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
13e60 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
13e70 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
13e80 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
13e90 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
13ea0 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
13eb0 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
13ec0 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
13ed0 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6f  ld .    */.    o
13ee0 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
13ef0 61 64 65 72 3a 0a 20 20 20 20 69 66 28 20 70 43  ader:.    if( pC
13f00 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66  ->iHdrOffset<aOf
13f10 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  fset[0] ){.     
13f20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44   /* Make sure zD
13f30 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e  ata points to en
13f40 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f  ough of the reco
13f50 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  rd to cover the 
13f60 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20  header. */.     
13f70 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
13f80 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73   ){.        mems
13f90 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
13fa0 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20  eof(sMem));.    
13fb0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13fc0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
13fd0 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73  (pCrsr, 0, aOffs
13fe0 65 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73 54 61  et[0], !pC->isTa
13ff0 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  ble, &sMem);.   
14000 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
14010 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 6f 70  ITE_OK ) goto op
14020 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20  _column_error;. 
14030 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
14040 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  u8*)sMem.z;.    
14050 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14060 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
14070 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  w;.      }.  .  
14080 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70      /* Fill in p
14090 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20  C->aType[i] and 
140a0 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65  aOffset[i] value
140b0 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32  s through the p2
140c0 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20  -th field. */.  
140d0 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72      i = pC->nHdr
140e0 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66  Parsed;.      of
140f0 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74  fset64 = aOffset
14100 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20  [i];.      zHdr 
14110 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48  = zData + pC->iH
14120 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  drOffset;.      
14130 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20  zEndHdr = zData 
14140 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20  + aOffset[0];.  
14150 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70      assert( i<=p
14160 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64  2 && zHdr<zEndHd
14170 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  r );.      do{. 
14180 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d 20         if( (t = 
14190 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b  zHdr[0])<0x80 ){
141a0 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b  .          zHdr+
141b0 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  +;.          off
141c0 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
141d0 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61  VdbeOneByteSeria
141e0 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
141f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14200 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71        zHdr += sq
14210 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
14220 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20  (zHdr, &t);.    
14230 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b        offset64 +
14240 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
14250 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
14260 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
14270 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20   pC->aType[i++] 
14280 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66  = t;.        aOf
14290 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28  fset[i] = (u32)(
142a0 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66 66  offset64 & 0xfff
142b0 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77  fffff);.      }w
142c0 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a  hile( i<=p2 && z
142d0 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
142e0 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
142f0 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
14300 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
14310 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
14320 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
14330 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c  C->aRow==0 ) sql
14340 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
14350 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 0a 20 20  se(&sMem);.  .  
14360 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
14370 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
14380 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
14390 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
143a0 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
143b0 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
143c0 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
143d0 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
143e0 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
143f0 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65  * (2) the entire
14400 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64   header was used
14410 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74   but not all dat
14420 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20  a was used.     
14430 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20   ** (3) the end 
14440 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65  of the data exte
14450 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65  nds beyond the e
14460 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14470 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14480 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64   if( (zHdr>=zEnd
14490 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e  Hdr && (zHdr>zEn
144a0 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34  dHdr || offset64
144b0 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
144c0 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
144d0 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61  ffset64 > pC->pa
144e0 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
144f0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
14500 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
14510 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
14520 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
14530 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
14540 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20 3d  }else{.      t =
14550 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f   0;.    }..    /
14560 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e  * If after tryin
14570 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77  g to extract new
14580 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
14590 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61  e header, nHdrPa
145a0 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73  rsed is.    ** s
145b0 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70  till not up to p
145c0 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  2, that means th
145d0 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  at the record ha
145e0 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a  s fewer than p2.
145f0 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20      ** columns. 
14600 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77   So the result w
14610 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68  ill be either th
14620 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
14630 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a  or a NULL..    *
14640 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48  /.    if( pC->nH
14650 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
14660 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
14670 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b  4type==P4_MEM ){
14680 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14690 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
146a0 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70  py(pDest, pOp->p
146b0 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74  4.pMem, MEM_Stat
146c0 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ic);.      }else
146d0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
146e0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
146f0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a  pDest);.      }.
14700 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
14710 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  lumn_out;.    }.
14720 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d    }else{.    t =
14730 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a   pC->aType[p2];.
14740 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63    }..  /* Extrac
14750 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f  t the content fo
14760 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f  r the p2+1-th co
14770 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63  lumn.  Control c
14780 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61  an only.  ** rea
14790 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66  ch this point if
147a0 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f   aOffset[p2], aO
147b0 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64  ffset[p2+1], and
147c0 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61   pC->aType[p2] a
147d0 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69  re.  ** all vali
147e0 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  d..  */.  assert
147f0 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72  ( p2<pC->nHdrPar
14800 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sed );.  assert(
14810 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
14820 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
14830 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
14840 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29  nvariants(pDest)
14850 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65   );.  if( VdbeMe
14860 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20  mDynamic(pDest) 
14870 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
14880 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
14890 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d    assert( t==pC-
148a0 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20  >aType[p2] );.  
148b0 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
148c0 6f 64 69 6e 67 3b 0a 20 20 69 66 28 20 70 43 2d  oding;.  if( pC-
148d0 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b  >szRow>=aOffset[
148e0 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20  p2+1] ){.    /* 
148f0 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d  This is the comm
14900 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68  on case where th
14910 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e  e desired conten
14920 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72  t fits on the or
14930 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61  iginal.    ** pa
14940 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63  ge - where the c
14950 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e  ontent is not on
14960 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   an overflow pag
14970 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20 3d  e */.    zData =
14980 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66 66   pC->aRow + aOff
14990 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28  set[p2];.    if(
149a0 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20 73   t<12 ){.      s
149b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
149c0 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44  Get(zData, t, pD
149d0 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
149e0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
149f0 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73   column value is
14a00 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e 65   a string, we ne
14a10 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74 20  ed a persistent 
14a20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20 20  value, not.     
14a30 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d 20   ** a MEM_Ephem 
14a40 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72 61  value.  This bra
14a50 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73 68  nch is a fast sh
14a60 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73 20  ort-cut that is 
14a70 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20 20  equivalent.     
14a80 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20 73   ** to calling s
14a90 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14aa0 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74 65  Get() and sqlite
14ab0 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61 6c  3VdbeDeephemeral
14ac0 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  ize()..      */.
14ad0 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
14ae0 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20 3d  st u16 aFlag[] =
14af0 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45 4d   { MEM_Blob, MEM
14b00 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d 3b  _Str|MEM_Term };
14b10 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e 20  .      pDest->n 
14b20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f 32  = len = (t-12)/2
14b30 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65 73  ;.      if( pDes
14b40 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65  t->szMalloc < le
14b50 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  n+2 ){.        p
14b60 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  Dest->flags = ME
14b70 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  M_Null;.        
14b80 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
14b90 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65  emGrow(pDest, le
14ba0 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e  n+2, 0) ) goto n
14bb0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
14bc0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73  se{.        pDes
14bd0 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d  t->z = pDest->zM
14be0 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20  alloc;.      }. 
14bf0 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73       memcpy(pDes
14c00 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e  t->z, zData, len
14c10 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
14c20 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
14c30 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31    pDest->z[len+1
14c40 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65  ] = 0;.      pDe
14c50 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61  st->flags = aFla
14c60 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20  g[t&1];.    }.  
14c70 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68  }else{.    /* Th
14c80 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
14c90 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
14ca0 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
14cb0 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20  ow pages */.    
14cc0 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  if( ((pOp->p5 & 
14cd0 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
14ce0 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
14cf0 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20  RG))!=0.        
14d00 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20    && ((t>=12 && 
14d10 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f  (t&1)==0) || (pO
14d20 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54  p->p5 & OPFLAG_T
14d30 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20  YPEOFARG)!=0)). 
14d40 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71      || (len = sq
14d50 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
14d60 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20  ypeLen(t))==0.  
14d70 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f    ){.      /* Co
14d80 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76  ntent is irrelev
14d90 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ant for.      **
14da0 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f      1. the typeo
14db0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  f() function,.  
14dc0 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65      **    2. the
14dd0 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
14de0 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
14df0 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ob, and.      **
14e00 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f      3. if the co
14e10 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
14e20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53  zero..      ** S
14e30 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
14e40 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e  ll use bogus con
14e50 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
14e60 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a   reading.      *
14e70 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  * content from d
14e80 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20 20 73 74  isk. */.      st
14e90 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 38 5d  atic u8 aZero[8]
14ea0 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  ;  /* This is th
14eb0 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
14ec0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
14ed0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61 5a  VdbeSerialGet(aZ
14ee0 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ero, t, pDest);.
14ef0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14f00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
14f10 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
14f20 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
14f30 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61  , len, !pC->isTa
14f40 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ble,.           
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b 0a          pDest);.
14f70 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
14f80 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
14f90 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
14fa0 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75  rialGet((const u
14fb0 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20  8*)pDest->z, t, 
14fc0 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20  pDest);.        
14fd0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
14fe0 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20  ~MEM_Ephem;.    
14ff0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f    }.    }.  }..o
15000 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 6f 70  p_column_out:.op
15010 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20  _column_error:. 
15020 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
15030 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52  SIZE(pDest);.  R
15040 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
15050 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20  p->p3, pDest);. 
15060 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15070 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
15080 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
15090 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
150a0 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
150b0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
150c0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
150d0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
150e0 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
150f0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
15100 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
15110 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
15120 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74   The nth charact
15130 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72  er of the.** str
15140 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  ing indicates th
15150 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  e column affinit
15160 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
15170 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74   used for the nt
15180 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  h.** memory cell
15190 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a   in the range..*
151a0 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69  /.case OP_Affini
151b0 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ty: {.  const ch
151c0 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
151d0 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
151e0 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
151f0 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b 20 20  /.  char cAff;  
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15210 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74  A single charact
15220 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a  er of affinity *
15230 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  /..  zAffinity =
15240 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
15250 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21  sert( zAffinity!
15260 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
15270 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70  zAffinity[pOp->p
15280 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  2]==0 );.  pIn1 
15290 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
152a0 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41 66 66  ;.  while( (cAff
152b0 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b   = *(zAffinity++
152c0 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  ))!=0 ){.    ass
152d0 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d  ert( pIn1 <= &p-
152e0 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  >aMem[(p->nMem-p
152f0 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
15300 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
15310 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
15320 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
15330 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63  (pIn1, cAff, enc
15340 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31  oding);.    pIn1
15350 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
15360 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
15370 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
15380 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
15390 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
153a0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
153b0 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
153c0 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
153d0 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
153e0 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
153f0 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
15400 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
15410 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
15420 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
15430 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
15440 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
15450 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
15460 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
15470 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
15480 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
15490 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
154a0 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
154b0 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
154c0 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
154d0 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
154e0 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
154f0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
15500 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
15510 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
15520 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
15530 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
15540 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
15550 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
15560 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
15570 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
15580 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
15590 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
155a0 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
155b0 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
155c0 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61  nity BLOB..*/.ca
155d0 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
155e0 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65  : {.  u8 *zNewRe
155f0 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cord;        /* 
15600 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64  A buffer to hold
15610 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
15620 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15630 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
15640 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15650 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
15660 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
15670 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15680 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
15690 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
156a0 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
156b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
156c0 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
156d0 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
156e0 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
156f0 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
15700 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
15710 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
15720 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  64 nZero;       
15730 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15740 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
15750 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15760 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15770 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
15780 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15790 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
157a0 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
157b0 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
157c0 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
157d0 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
157e0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
157f0 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
15800 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
15810 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
15820 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
15830 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
15840 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
15850 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
15860 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15870 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
15880 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15890 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
158a0 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
158b0 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
158c0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
158d0 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
158e0 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
158f0 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
15900 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
15910 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
15920 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
15930 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
15940 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f  cord[] header */
15950 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
15960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
15970 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
15980 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20  ecord[] content 
15990 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20  */.  u32 len;   
159a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
159b0 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64  ength of a field
159c0 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69   */..  /* Assumi
159d0 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
159e0 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
159f0 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
15a00 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
15a10 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
15a20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
15a30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
15a70 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
15a80 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
15a90 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
15aa0 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
15ab0 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
15ac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ad0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ae0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b00 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
15b10 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
15b20 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
15b30 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
15b40 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
15b50 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
15b60 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a   so forth..  **.
15b70 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
15b80 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
15b90 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
15ba0 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
15bb0 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
15bc0 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
15bd0 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
15be0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15bf0 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
15c00 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
15c10 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
15c20 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
15c30 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
15c40 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
15c50 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
15c60 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d  ..  */.  nData =
15c70 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
15c80 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
15c90 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
15ca0 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20    nHdr = 0;     
15cb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15cc0 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
15cd0 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65  r space */.  nZe
15ce0 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
15cf0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
15d00 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
15d10 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
15d20 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
15d30 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
15d40 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
15d50 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
15d60 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
15d70 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
15d80 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  ld<=(p->nMem-p->
15d90 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
15da0 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e  pData0 = &aMem[n
15db0 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
15dc0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
15dd0 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
15de0 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
15df0 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
15e00 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
15e10 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74  .  /* Identify t
15e20 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
15e30 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  er */.  assert( 
15e40 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20  pOp->p3<pOp->p1 
15e50 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
15e60 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  >p1+pOp->p2 );. 
15e70 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
15e80 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
15e90 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
15ea0 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79  ut);..  /* Apply
15eb0 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61   the requested a
15ec0 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69  ffinity to all i
15ed0 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73  nputs.  */.  ass
15ee0 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
15ef0 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66  st );.  if( zAff
15f00 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65  inity ){.    pRe
15f10 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20  c = pData0;.    
15f20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  do{.      applyA
15f30 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20  ffinity(pRec++, 
15f40 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20  *(zAffinity++), 
15f50 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
15f60 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
15f70 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63  ty[0]==0 || pRec
15f80 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d  <=pLast );.    }
15f90 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79  while( zAffinity
15fa0 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  [0] );.  }..  /*
15fb0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
15fc0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
15fd0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
15fe0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
15ff0 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
16000 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
16010 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
16020 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
16030 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
16040 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
16050 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
16060 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) );.    pRec->u
16070 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79  Temp = serial_ty
16080 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
16090 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
160a0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c   file_format, &l
160b0 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  en);.    if( pRe
160c0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
160d0 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
160e0 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
160f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
16100 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
16110 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  Rec) ) goto no_m
16120 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  em;.      }else{
16130 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  .        nZero +
16140 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
16150 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20  .        len -= 
16160 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
16170 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
16180 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
16190 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
161a0 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b  ial_type==127 );
161b0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
161c0 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20  erial_type==128 
161d0 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  );.    nHdr += s
161e0 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20  erial_type<=127 
161f0 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72  ? 1 : sqlite3Var
16200 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
16210 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28  pe);.  }while( (
16220 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74 61 30 20  --pRec)>=pData0 
16230 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43  );..  /* EVIDENC
16240 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31  E-OF: R-22564-11
16250 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62  647 The header b
16260 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e  egins with a sin
16270 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  gle varint.  ** 
16280 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73  which determines
16290 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
162a0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
162b0 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61  e header. The va
162c0 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  rint.  ** value 
162d0 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  is the size of t
162e0 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74  he header in byt
162f0 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  es including the
16300 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a   size varint.  *
16310 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74  * itself. */.  t
16320 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
16330 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  26 );.  testcase
16340 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20  ( nHdr==127 );. 
16350 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29   if( nHdr<=126 )
16360 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d  {.    /* The com
16370 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20  mon case */.    
16380 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c  nHdr += 1;.  }el
16390 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20  se{.    /* Rare 
163a0 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79  case of a really
163b0 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f   large header */
163c0 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73  .    nVarint = s
163d0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
163e0 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20  nHdr);.    nHdr 
163f0 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20  += nVarint;.    
16400 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
16410 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
16420 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d  r) ) nHdr++;.  }
16430 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b  .  nByte = nHdr+
16440 6e 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79  nData;.  if( nBy
16450 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69  te+nZero>db->aLi
16460 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
16470 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
16480 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
16490 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
164a0 65 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67  e the output reg
164b0 69 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66  ister has a buff
164c0 65 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20  er large enough 
164d0 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74  to store .  ** t
164e0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54  he new record. T
164f0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16500 65 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20  er (pOp->p3) is 
16510 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20  not allowed to. 
16520 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68   ** be one of th
16530 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
16540 73 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66  s (because the f
16550 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f  ollowing call to
16560 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
16570 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69  eMemClearAndResi
16580 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62  ze() could clobb
16590 65 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66  er the value bef
165a0 6f 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e  ore it is used).
165b0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
165c0 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
165d0 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28  ndResize(pOut, (
165e0 69 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20  int)nByte) ){.  
165f0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
16600 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20   }.  zNewRecord 
16610 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b  = (u8 *)pOut->z;
16620 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65  ..  /* Write the
16630 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d   record */.  i =
16640 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65   putVarint32(zNe
16650 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a  wRecord, nHdr);.
16660 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73    j = nHdr;.  as
16670 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
16680 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20  ast );.  pRec = 
16690 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20  pData0;.  do{.  
166a0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
166b0 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20  pRec->uTemp;.   
166c0 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
166d0 20 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46   R-06529-47362 F
166e0 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a  ollowing the siz
166f0 65 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65  e varint are one
16700 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20   or more.    ** 
16710 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e  additional varin
16720 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75  ts, one per colu
16730 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20  mn. */.    i += 
16740 70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65  putVarint32(&zNe
16750 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69  wRecord[i], seri
16760 61 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20  al_type);       
16770 20 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74       /* serial t
16780 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56  ype */.    /* EV
16790 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35  IDENCE-OF: R-645
167a0 33 36 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c  36-51728 The val
167b0 75 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  ues for each col
167c0 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72  umn in the recor
167d0 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61  d.    ** immedia
167e0 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20  tely follow the 
167f0 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a  header. */.    j
16800 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53   += sqlite3VdbeS
16810 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65  erialPut(&zNewRe
16820 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73  cord[j], pRec, s
16830 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20  erial_type); /* 
16840 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68  content */.  }wh
16850 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70  ile( (++pRec)<=p
16860 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Last );.  assert
16870 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61  ( i==nHdr );.  a
16880 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20  ssert( j==nByte 
16890 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
168a0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
168b0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
168c0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
168d0 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
168e0 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
168f0 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20  s = MEM_Blob;.  
16900 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
16910 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
16920 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
16930 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
16940 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ero;.  }.  pOut-
16950 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
16960 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
16970 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
16980 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65   converted to te
16990 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52  xt */.  REGISTER
169a0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
169b0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
169c0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
169d0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
169e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74  /* Opcode: Count
169f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
16a00 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
16a10 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74  count().**.** St
16a20 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ore the number o
16a30 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e  f entries (an in
16a40 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20  teger value) in 
16a50 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
16a60 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79  ex .** opened by
16a70 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65   cursor P1 in re
16a80 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66  gister P2.*/.#if
16a90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
16aa0 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65  _BTREECOUNT.case
16ab0 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20   OP_Count: {    
16ac0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
16ad0 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
16ae0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
16af0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ..  assert( p->a
16b00 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65  pCsr[pOp->p1]->e
16b10 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
16b20 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
16b30 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
16b40 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f  ->p1]->uc.pCurso
16b50 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
16b60 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d  sr );.  nEntry =
16b70 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
16b80 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
16b90 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
16ba0 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
16bb0 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74  qlite3BtreeCount
16bc0 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29  (pCrsr, &nEntry)
16bd0 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
16be0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
16bf0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
16c00 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b   nEntry;.  break
16c10 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
16c20 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74  pcode: Savepoint
16c30 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
16c40 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65  ** Open, release
16c50 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   or rollback the
16c60 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64   savepoint named
16c70 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34   by parameter P4
16c80 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f  , depending.** o
16c90 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
16ca0 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77  1. To open a new
16cb0 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
16cc0 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63  0. To release (c
16cd0 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69  ommit) an.** exi
16ce0 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c  sting savepoint,
16cf0 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f   P1==1, or to ro
16d00 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69  llback an existi
16d10 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d  ng savepoint P1=
16d20 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  =2..*/.case OP_S
16d30 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  avepoint: {.  in
16d40 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16d60 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65   Value of P1 ope
16d70 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rand */.  char *
16d80 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
16d90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
16da0 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a  e of savepoint *
16db0 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20  /.  int nName;. 
16dc0 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77   Savepoint *pNew
16dd0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
16de0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76  Savepoint;.  Sav
16df0 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20  epoint *pTmp;.  
16e00 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a  int iSavepoint;.
16e10 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20    int ii;..  p1 
16e20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61  = pOp->p1;.  zNa
16e30 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  me = pOp->p4.z;.
16e40 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
16e50 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74  t the p1 paramet
16e60 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73  er is valid. Als
16e70 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  o that if there 
16e80 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20  is no open.  ** 
16e90 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
16ea0 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62  n there cannot b
16eb0 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73  e any savepoints
16ec0 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  . .  */.  assert
16ed0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
16ee0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  ==0 || db->autoC
16ef0 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
16f00 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
16f10 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53  INT_BEGIN||p1==S
16f20 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16f30 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
16f40 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73  ROLLBACK );.  as
16f50 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
16f60 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72  oint || db->isTr
16f70 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16f80 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  nt==0 );.  asser
16f90 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
16fa0 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20  tCount(db) );.  
16fb0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
16fc0 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70  ader );..  if( p
16fd0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
16fe0 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  IN ){.    if( db
16ff0 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
17000 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77  {.      /* A new
17010 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f   savepoint canno
17020 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20  t be created if 
17030 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
17040 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a   write .      **
17050 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65   statements (i.e
17060 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74  . open read/writ
17070 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c  e incremental bl
17080 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20  ob handles)..   
17090 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
170a0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
170b0 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
170c0 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61  epoint - SQL sta
170d0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
170e0 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
170f0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17100 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17110 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53  nName = sqlite3S
17120 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
17130 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
17140 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
17150 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  E.      /* This 
17160 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20  call is Ok even 
17170 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e  if this savepoin
17180 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  t is actually a 
17190 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20  transaction.    
171a0 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28    ** savepoint (
171b0 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68  and therefore sh
171c0 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20  ould not prompt 
171d0 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61  xSavepoint()) ca
171e0 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a  llbacks..      *
171f0 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74  * If this is a t
17200 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
17210 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65  oint being opene
17220 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  d, it is guarant
17230 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61  eed.      ** tha
17240 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e  t the db->aVTran
17250 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70  s[] array is emp
17260 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73  ty.  */.      as
17270 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f  sert( db->autoCo
17280 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
17290 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20  VTrans==0 );.   
172a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
172b0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
172c0 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
172d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
17300 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29  +db->nSavepoint)
17310 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
17320 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
17330 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17340 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ror;.#endif..   
17350 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e     /* Create a n
17360 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72  ew savepoint str
17370 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20  ucture. */.     
17380 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   pNew = sqlite3D
17390 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
173a0 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
173b0 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
173c0 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
173d0 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
173e0 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
173f0 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
17400 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
17410 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
17420 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
17430 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
17440 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
17450 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
17460 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
17470 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
17480 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
17490 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
174a0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
174b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
174c0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
174d0 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
174e0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
174f0 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
17500 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17510 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
17520 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
17530 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
17540 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61   Link the new sa
17550 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65  vepoint into the
17560 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
17570 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20  's list. */.    
17580 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20      pNew->pNext 
17590 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
175a0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
175b0 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b  avepoint = pNew;
175c0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
175d0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64  DeferredCons = d
175e0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
175f0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
17600 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
17610 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
17620 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d  ImmCons;.      }
17630 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
17640 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
17650 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
17660 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
17670 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
17680 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
17690 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
176a0 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
176b0 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
176c0 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
176d0 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
176e0 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
176f0 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
17700 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
17710 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
17720 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
17730 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
17740 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
17750 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
17760 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
17770 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
17780 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
17790 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
177a0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20  dbeError(p, "no 
177b0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
177c0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
177d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
177e0 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
177f0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
17800 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
17810 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
17820 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
17830 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
17840 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
17850 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
17860 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
17870 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
17880 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
17890 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
178a0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
178b0 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
178c0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
178f0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
17900 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
17910 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17920 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
17930 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
17940 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
17950 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17960 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
17970 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
17980 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
17990 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
179a0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
179b0 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
179c0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
179d0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
179e0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
179f0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
17a00 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
17a10 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
17a20 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17a30 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
17a40 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
17a50 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
17a60 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
17a70 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17a80 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17a90 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17aa0 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17ab0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
17ac0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17ad0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
17ae0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
17af0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
17b00 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
17b10 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
17b20 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
17b30 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17b40 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
17b50 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
17b60 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17b70 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
17b80 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
17b90 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
17ba0 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17bb0 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
17bc0 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
17bd0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17be0 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
17bf0 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
17c00 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
17c10 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
17c20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
17c30 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
17c40 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17c50 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
17c60 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
17c70 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
17c80 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
17c90 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20  es)!=0;.        
17ca0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
17cb0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
17cc0 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
17cd0 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
17ce0 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
17cf0 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20  Db[ii].pBt,.    
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f     SQLITE_ABORT_
17d30 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20  ROLLBACK,.      
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d   isSchemaChange=
17d70 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  =0);.           
17d80 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17d90 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
17da0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17db0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17dc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17dd0 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
17de0 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d  e = 0;.        }
17df0 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
17e00 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
17e10 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
17e20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17e30 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61  eSavepoint(db->a
17e40 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20  Db[ii].pBt, p1, 
17e50 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  iSavepoint);.   
17e60 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
17e70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17e80 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
17e90 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17ea0 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
17eb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
17ec0 66 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67  f( isSchemaChang
17ed0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
17ee0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
17ef0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
17f00 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  b);.          sq
17f10 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
17f20 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
17f30 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17f40 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d  db->flags = (db-
17f50 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f  >flags | SQLITE_
17f60 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a  InternChanges);.
17f70 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17f80 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65  }.  .      /* Re
17f90 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
17fa0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45  her this is a RE
17fb0 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43  LEASE or ROLLBAC
17fc0 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a  K, destroy all .
17fd0 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69        ** savepoi
17fe0 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64  nts nested insid
17ff0 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69  e of the savepoi
18000 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
18010 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77  d on. */.      w
18020 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70  hile( db->pSavep
18030 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74  oint!=pSavepoint
18040 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70   ){.        pTmp
18050 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
18060 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
18070 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70  Savepoint = pTmp
18080 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
18090 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
180a0 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20  b, pTmp);.      
180b0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
180c0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
180d0 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61     /* If it is a
180e0 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64   RELEASE, then d
180f0 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70  estroy the savep
18100 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
18110 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a  ted on .      **
18120 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61   too. If it is a
18130 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68   ROLLBACK TO, th
18140 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65  en set the numbe
18150 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20  r of deferred . 
18160 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69       ** constrai
18170 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72  nt violations pr
18180 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
18190 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c  abase to the val
181a0 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20  ue stored.      
181b0 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65  ** when the save
181c0 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65  point was create
181d0 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  d.  */.      if(
181e0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
181f0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
18200 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70    assert( pSavep
18210 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70  oint==db->pSavep
18220 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  oint );.        
18230 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18240 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
18250 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
18260 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53  te3DbFree(db, pS
18270 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
18280 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61     if( !isTransa
18290 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20  ction ){.       
182a0 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
182b0 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t--;.        }. 
182c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
182d0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
182e0 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  dCons = pSavepoi
182f0 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  nt->nDeferredCon
18300 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  s;.        db->n
18310 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
18320 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
18330 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
18340 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69        }..      i
18350 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
18360 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49  n || p1==SAVEPOI
18370 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20  NT_ROLLBACK ){. 
18380 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
18390 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
183a0 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  (db, p1, iSavepo
183b0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
183c0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
183d0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
183e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
183f0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
18400 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
18410 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
18420 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
18430 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
18440 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
18450 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
18460 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
18470 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
18480 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
18490 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
184a0 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
184b0 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
184c0 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
184d0 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
184e0 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
184f0 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
18500 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
18510 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
18520 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
18530 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
18540 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
18550 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
18560 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
18570 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
18580 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
18590 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
185a0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
185b0 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20  int iRollback;. 
185c0 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a   int turnOnAC;..
185d0 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
185e0 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
185f0 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
18600 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43  ->p2;.  turnOnAC
18610 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f   = desiredAutoCo
18620 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74  mmit && !db->aut
18630 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72  oCommit;.  asser
18640 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
18650 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
18660 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
18670 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
18680 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
18690 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
186a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
186b0 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
186c0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
186d0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
186e0 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
186f0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
18700 20 29 3b 0a 0a 20 20 69 66 28 20 74 75 72 6e 4f   );..  if( turnO
18710 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62 61 63  nAC && !iRollbac
18720 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72  k && db->nVdbeWr
18730 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20  ite>0 ){.    /* 
18740 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
18750 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
18760 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
18770 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
18780 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20  g.    ** return 
18790 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
187a0 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
187b0 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
187c0 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
187d0 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
187e0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
187f0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
18800 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
18830 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
18840 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
18850 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20  E_BUSY;.  }else 
18860 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
18870 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
18880 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
18890 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
188a0 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
188b0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
188c0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
188d0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
188e0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
188f0 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
18900 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
18910 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
18920 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
18930 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
18940 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18950 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18960 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65  eturn;.    }else
18970 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  {.      db->auto
18980 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73  Commit = (u8)des
18990 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
189a0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71      }.    if( sq
189b0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
189c0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
189d0 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28  .      p->pc = (
189e0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
189f0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
18a00 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64  ommit = (u8)(1-d
18a10 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
18a20 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  );.      p->rc =
18a30 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
18a40 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  Y;.      goto vd
18a50 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
18a60 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
18a70 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >nStatement==0 )
18a80 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f  ;.    sqlite3Clo
18a90 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29  seSavepoints(db)
18aa0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d  ;.    if( p->rc=
18ab0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18ac0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18ad0 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  DONE;.    }else{
18ae0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18af0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
18b00 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
18b10 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  turn;.  }else{. 
18b20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18b30 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28  ror(p,.        (
18b40 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  !desiredAutoComm
18b50 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72  it)?"cannot star
18b60 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  t a transaction 
18b70 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
18b80 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20  tion":(.        
18b90 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e  (iRollback)?"can
18ba0 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
18bb0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
18bc0 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20   active":.      
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61               "ca
18be0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f  nnot commit - no
18bf0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
18c00 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20  active"));.     
18c10 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51      .    rc = SQ
18c20 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
18c30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18c40 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
18c50 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
18c60 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
18c70 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
18c80 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
18c90 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
18ca0 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
18cb0 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
18cc0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
18cd0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
18ce0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
18cf0 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
18d00 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
18d10 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
18d20 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
18d30 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
18d40 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
18d50 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
18d60 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
18d70 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
18d80 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
18d90 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
18da0 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
18db0 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
18dc0 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
18dd0 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
18de0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
18df0 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
18e00 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
18e10 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
18e20 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
18e30 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
18e40 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
18e50 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
18e60 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
18e70 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
18e80 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
18e90 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
18ea0 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
18eb0 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
18ec0 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
18ed0 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
18ee0 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
18ef0 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
18f00 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
18f10 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
18f20 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18f30 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
18f40 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
18f50 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
18f60 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18f70 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
18f80 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
18f90 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
18fa0 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
18fb0 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
18fc0 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
18fd0 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
18fe0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
18ff0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
19000 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
19010 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
19020 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
19030 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
19040 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
19050 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
19060 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
19070 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
19080 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
19090 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
190a0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
190b0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
190c0 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
190d0 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
190e0 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
190f0 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
19100 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
19110 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
19120 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
19130 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
19140 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
19150 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
19160 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
19170 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
19180 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
19190 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
191a0 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
191b0 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
191c0 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
191d0 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
191e0 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
191f0 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
19200 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
19210 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
19220 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
19230 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
19240 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
19250 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
19260 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
19270 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
19280 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
19290 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
192a0 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
192b0 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
192c0 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
192d0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
192e0 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
192f0 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
19300 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
19310 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
19320 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
19330 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
19340 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
19350 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
19360 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
19370 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
19380 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
19390 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
193a0 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
193b0 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
193c0 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
193d0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
193e0 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
193f0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
19400 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
19410 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
19420 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
19430 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
19440 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
19450 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
19460 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
19470 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
19480 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
19490 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
194a0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
194b0 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
194c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
194d0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
194e0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
194f0 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
19500 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
19510 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
19520 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
19530 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63  ->p2);.    testc
19540 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
19550 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b  BUSY_SNAPSHOT );
19560 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72  .    testcase( r
19570 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52  c==SQLITE_BUSY_R
19580 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69  ECOVERY );.    i
19590 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
195a0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
195b0 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
195c0 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
195d0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20     p->rc = rc;. 
195e0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
195f0 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
19600 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
19610 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
19620 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19630 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
19640 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
19650 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
19660 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
19670 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
19680 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
19690 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
196a0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
196b0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
196c0 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
196d0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
196e0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
196f0 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
19700 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
19710 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
19720 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
19730 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
19740 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
19750 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
19760 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
19770 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
19780 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
19790 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
197a0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
197b0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
197c0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
197d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
197e0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
197f0 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
19800 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
19810 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
19820 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
19830 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
19840 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
19850 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
19860 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
19870 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
19880 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
19890 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
198a0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
198b0 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
198c0 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
198d0 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
198e0 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
198f0 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
19900 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
19910 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
19920 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
19930 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
19940 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
19950 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61      }..    /* Ga
19960 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20  ther the schema 
19970 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66  version number f
19980 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20  or checking:.   
19990 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   ** IMPLEMENTATI
199a0 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d 31  ON-OF: R-32195-1
199b0 39 34 36 35 20 54 68 65 20 73 63 68 65 6d 61 20  9465 The schema 
199c0 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
199d0 62 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2a 2a  by SQLite.    **
199e0 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75 65   each time a que
199f0 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20 74  ry is executed t
19a00 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
19a10 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65  e internal cache
19a20 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 73   of the.    ** s
19a30 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20  chema used when 
19a40 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51  compiling the SQ
19a50 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20  L query matches 
19a60 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  the schema of th
19a70 65 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73  e.    ** databas
19a80 65 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20  e against which 
19a90 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
19aa0 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65  ry is actually e
19ab0 78 65 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f 0a  xecuted..    */.
19ac0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
19ad0 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
19ae0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
19af0 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
19b00 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62  );.    iGen = db
19b10 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
19b20 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
19b30 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ion;.  }else{.  
19b40 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d    iGen = iMeta =
19b50 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74   0;.  }.  assert
19b60 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
19b70 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
19b80 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70  INT32 );.  if( p
19b90 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61  Op->p5 && (iMeta
19ba0 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65  !=pOp->p3 || iGe
19bb0 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b  n!=pOp->p4.i) ){
19bc0 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
19bd0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
19be0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
19bf0 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
19c00 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
19c10 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
19c20 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
19c30 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
19c40 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
19c50 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
19c60 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
19c70 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
19c80 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
19c90 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
19ca0 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
19cb0 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
19cc0 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
19cd0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
19ce0 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
19cf0 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
19d00 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
19d10 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
19d20 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
19d30 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
19d40 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
19d50 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
19d60 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
19d70 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
19d80 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
19d90 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
19da0 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
19db0 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
19dc0 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
19dd0 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
19de0 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
19df0 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
19e00 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
19e10 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
19e20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
19e30 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
19e40 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
19e50 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
19e60 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
19e70 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
19e80 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
19e90 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
19ea0 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
19eb0 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
19ec0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
19ed0 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
19ee0 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
19ef0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
19f00 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
19f10 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19f20 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
19f30 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
19f40 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
19f50 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
19f60 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
19f70 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
19f80 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 1;.    rc = SQ
19f90 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
19fa0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19fb0 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
19fc0 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
19fd0 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
19fe0 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
19ff0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
1a000 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
1a010 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
1a020 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
1a030 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
1a040 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1a050 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
1a060 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1a070 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1a080 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
1a090 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1a0a0 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1a0b0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1a0c0 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
1a0d0 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
1a0e0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
1a0f0 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
1a100 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
1a110 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
1a120 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
1a130 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
1a140 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
1a150 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
1a160 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
1a170 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
1a180 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1a190 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
1a1a0 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
1a1b0 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
1a1c0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
1a1d0 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
1a1e0 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
1a1f0 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
1a200 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1a210 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
1a220 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
1a230 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1a240 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
1a250 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1a260 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1a270 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1a280 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1a290 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
1a2a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1a2b0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1a2c0 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a  eMask, iDb) );..
1a2d0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1a2e0 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
1a2f0 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
1a300 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1a310 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
1a320 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
1a330 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1a340 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
1a350 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1a360 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
1a370 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
1a380 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1a390 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74  register P3 (int
1a3a0 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69  erpreted as an i
1a3b0 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20  nteger).** into 
1a3c0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
1a3d0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
1a3e0 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73    P2==1 is the s
1a3f0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1a400 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65  .** P2==2 is the
1a410 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1a420 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  . P2==3 is the r
1a430 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
1a440 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
1a450 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
1a460 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
1a470 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1a480 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1a490 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
1a4a0 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1a4b0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1a4c0 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
1a4d0 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
1a4e0 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
1a4f0 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
1a500 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
1a510 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  SetCookie: {    
1a520 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44     /* in3 */.  D
1a530 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
1a540 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
1a550 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1a560 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a570 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1a580 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a590 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1a5a0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1a5b0 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
1a5c0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
1a5d0 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
1a5e0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1a5f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
1a600 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
1a610 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1a620 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1a630 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
1a640 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1a650 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p3];.  sqlite
1a660 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1a670 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20 53  fy(pIn3);.  /* S
1a680 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
1a690 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
1a6a0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
1a6b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1a6c0 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
1a6d0 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
1a6e0 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  , (int)pIn3->u.i
1a6f0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
1a700 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
1a710 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
1a720 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
1a730 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
1a740 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
1a750 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
1a760 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
1a770 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1a780 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e 33  okie = (int)pIn3
1a790 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e 66  ->u.i;.    db->f
1a7a0 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
1a7b0 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
1a7c0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1a7d0 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
1a7e0 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
1a7f0 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
1a800 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
1a810 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1a820 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1a830 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75 2e  t = (u8)pIn3->u.
1a840 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  i;.  }.  if( pOp
1a850 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
1a860 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
1a870 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1a880 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
1a890 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
1a8a0 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
1a8b0 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
1a8c0 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
1a8d0 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
1a8e0 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
1a8f0 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
1a900 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72  ed = 0;.  }.  br
1a910 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a920 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
1a930 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1a940 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1a950 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1a960 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
1a970 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
1a980 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
1a990 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
1a9a0 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
1a9b0 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
1a9c0 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
1a9d0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
1a9e0 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
1a9f0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1aa00 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
1aa10 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
1aa20 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
1aa30 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
1aa40 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
1aa50 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
1aa60 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
1aa70 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
1aa80 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
1aa90 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
1aaa0 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
1aab0 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
1aac0 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
1aad0 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
1aae0 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
1aaf0 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
1ab00 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
1ab10 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
1ab20 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
1ab30 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
1ab40 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1ab50 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
1ab60 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
1ab70 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
1ab80 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
1ab90 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
1aba0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1abb0 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
1abc0 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
1abd0 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
1abe0 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
1abf0 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
1ac00 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1ac10 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
1ac20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
1ac30 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
1ac40 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
1ac50 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
1ac60 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
1ac70 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
1ac80 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
1ac90 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
1aca0 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
1acb0 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
1acc0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
1acd0 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
1ace0 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
1acf0 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
1ad00 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
1ad10 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
1ad20 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
1ad30 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
1ad40 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
1ad50 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
1ad60 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
1ad70 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
1ad80 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1ad90 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1ada0 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1adb0 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1adc0 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1add0 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1ade0 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1adf0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1ae00 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
1ae10 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
1ae20 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
1ae30 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
1ae40 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
1ae50 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
1ae60 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
1ae70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
1ae80 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1ae90 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1aea0 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
1aeb0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1aec0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
1aed0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1aee0 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70   OpenWrite, Reop
1aef0 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  enIdx.*/./* Opco
1af00 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31  de: ReopenIdx P1
1af10 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1af20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1af30 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54  2 iDb=P3.**.** T
1af40 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1af50 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ode works exactl
1af60 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20  y like ReadOpen 
1af70 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66  except that it f
1af80 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  irst.** checks t
1af90 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72  o see if the cur
1afa0 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72  sor on P1 is alr
1afb0 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61  eady open with a
1afc0 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75   root page.** nu
1afd0 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69  mber of P2 and i
1afe0 66 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63  f it is this opc
1aff0 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f  ode becomes a no
1b000 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  -op.  In other w
1b010 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20  ords,.** if the 
1b020 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64  cursor is alread
1b030 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72  y open, do not r
1b040 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  eopen it..**.** 
1b050 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70  The ReopenIdx op
1b060 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65  code may only be
1b070 20 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30   used with P5==0
1b080 20 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69   and with P4 bei
1b090 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e  ng.** a P4_KEYIN
1b0a0 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74  FO object.  Furt
1b0b0 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20  hermore, the P3 
1b0c0 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68  value must be th
1b0d0 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65  e same as.** eve
1b0e0 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49  ry other ReopenI
1b0f0 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66  dx or OpenRead f
1b100 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73  or the same curs
1b110 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  or number..**.**
1b120 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61   See the OpenRea
1b130 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e  d opcode documen
1b140 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
1b150 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1b160 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
1b170 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
1b180 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1b190 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1b1a0 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  Db=P3.**.** Open
1b1b0 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
1b1c0 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
1b1d0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1b1e0 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
1b1f0 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
1b200 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
1b210 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1b220 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
1b230 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
1b240 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
1b250 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1b260 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1b270 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1b280 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1b290 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1b2a0 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1b2b0 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1b2c0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1b2d0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
1b2e0 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
1b2f0 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
1b300 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1b310 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1b320 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
1b330 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
1b340 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1b350 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1b360 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
1b370 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
1b380 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1b390 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
1b3a0 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
1b3b0 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
1b3c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
1b3d0 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
1b3e0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
1b3f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
1b400 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
1b410 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
1b420 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
1b430 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
1b440 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
1b450 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
1b460 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
1b470 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
1b480 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
1b490 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
1b4a0 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
1b4b0 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
1b4c0 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
1b4d0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
1b4e0 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74  openIdx: {.  int
1b4f0 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
1b500 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
1b510 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
1b520 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
1b530 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
1b540 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1b550 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
1b560 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1b570 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1b580 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1b590 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b5a0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1b5b0 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  O );.  pCur = p-
1b5c0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1b5d0 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70  .  if( pCur && p
1b5e0 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28  Cur->pgnoRoot==(
1b5f0 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  u32)pOp->p2 ){. 
1b600 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d     assert( pCur-
1b610 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b  >iDb==pOp->p3 );
1b620 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74        /* Guarant
1b630 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20  eed by the code 
1b640 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20  generator */.   
1b650 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f   goto open_curso
1b660 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d  r_set_hints;.  }
1b670 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
1b680 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65  sor is not curre
1b690 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20  ntly open or is 
1b6a0 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72  open on a differ
1b6b0 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20  ent.  ** index, 
1b6c0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1b6d0 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65  h into OP_OpenRe
1b6e0 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65  ad to force a re
1b6f0 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  open */.case OP_
1b700 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
1b710 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20  P_OpenWrite:..  
1b720 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1b730 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1b740 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  e || pOp->p5==0 
1b750 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c  || pOp->p5==OPFL
1b760 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61  AG_SEEKEQ );.  a
1b770 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1b780 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1b790 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1b7a0 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70  _OpenRead || pOp
1b7b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f  ->opcode==OP_Reo
1b7c0 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20  penIdx.         
1b7d0 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d   || p->readOnly=
1b7e0 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  =0 );..  if( p->
1b7f0 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72  expired ){.    r
1b800 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
1b810 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62  _ROLLBACK;.    b
1b820 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  reak;.  }..  nFi
1b830 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
1b840 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
1b850 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
1b860 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1b870 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
1b880 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
1b890 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1b8a0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1b8b0 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20  iDb) );.  pDb = 
1b8c0 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
1b8d0 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
1b8e0 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
1b8f0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
1b900 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1b910 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  te ){.    assert
1b920 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  ( OPFLAG_FORDELE
1b930 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c  TE==BTREE_FORDEL
1b940 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61  ETE );.    wrFla
1b950 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20  g = BTREE_WRCSR 
1b960 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
1b970 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a  LAG_FORDELETE);.
1b980 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1b990 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
1b9a0 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
1b9b0 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
1b9c0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1b9d0 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
1b9e0 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
1b9f0 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
1ba00 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
1ba10 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1ba20 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
1ba30 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
1ba40 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
1ba50 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1ba60 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20  G_P2ISREG ){.   
1ba70 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
1ba80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
1ba90 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
1baa0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
1bab0 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
1bac0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1bad0 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
1bae0 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
1baf0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1bb00 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
1bb10 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1bb20 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
1bb30 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
1bb40 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
1bb50 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
1bb60 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
1bb70 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ior OP_CreateTab
1bb80 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  le opcode and.  
1bb90 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
1bba0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
1bbb0 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
1bbc0 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
1bbd0 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
1bbe0 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
1bbf0 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
1bc00 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1bc10 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
1bc20 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
1bc30 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
1bc40 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
1bc50 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c 32    if( NEVER(p2<2
1bc60 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  ) ) {.      rc =
1bc70 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
1bc80 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BKPT;.      goto
1bc90 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1bca0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
1bcb0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1bcc0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
1bcd0 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70      pKeyInfo = p
1bce0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1bcf0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1bd00 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1bd10 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  db) );.    asser
1bd20 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1bd30 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c  =db );.    nFiel
1bd40 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  d = pKeyInfo->nF
1bd50 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ield+pKeyInfo->n
1bd60 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20  XField;.  }else 
1bd70 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1bd80 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20  =P4_INT32 ){.   
1bd90 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1bda0 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  4.i;.  }.  asser
1bdb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1bdc0 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
1bdd0 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61  d>=0 );.  testca
1bde0 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b  se( nField==0 );
1bdf0 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20    /* Table with 
1be00 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1be10 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20  KEY and nothing 
1be20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d  else */.  pCur =
1be30 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1be40 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
1be50 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45  ld, iDb, CURTYPE
1be60 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1be70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1be80 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1be90 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1bea0 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1beb0 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f  ;.  pCur->pgnoRo
1bec0 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66 20  ot = p2;.#ifdef 
1bed0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
1bee0 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77 72  Cur->wrFlag = wr
1bef0 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20 72  Flag;.#endif.  r
1bf00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1bf10 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
1bf20 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
1bf30 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f   pCur->uc.pCurso
1bf40 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1bf50 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1bf60 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1bf70 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1bf80 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69   variable. Previ
1bf90 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
1bfa0 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
1bfb0 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
1bfc0 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
1bfd0 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
1bfe0 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
1bff0 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
1c000 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
1c010 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
1c020 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
1c030 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
1c040 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
1c050 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
1c060 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
1c070 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
1c080 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f  _KEYINFO;..open_
1c090 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1c0a0 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  :.  assert( OPFL
1c0b0 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1c0c0 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1c0d0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53  assert( OPFLAG_S
1c0e0 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45  EEKEQ==BTREE_SEE
1c0f0 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63 61  K_EQ );.  testca
1c100 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  se( pOp->p5 & OP
1c110 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b 0a  FLAG_BULKCSR );.
1c120 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1c130 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
1c140 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  S.  testcase( pO
1c150 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 53  p->p2 & OPFLAG_S
1c160 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66 0a  EEKEQ );.#endif.
1c170 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1c180 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70 43  rsorHintFlags(pC
1c190 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 0a  ur->uc.pCursor,.
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1c1c0 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
1c1d0 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47  G_BULKCSR|OPFLAG
1c1e0 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 62 72  _SEEKEQ)));.  br
1c1f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c200 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1c210 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1c220 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1c230 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1c240 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1c250 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1c260 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1c270 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1c280 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1c290 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1c2a0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1c2b0 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1c2c0 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1c2d0 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1c2e0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1c2f0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1c300 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1c310 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1c320 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1c330 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1c340 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1c350 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1c360 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1c370 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1c380 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1c390 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1c3a0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1c3b0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1c3c0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1c3d0 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1c3e0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1c3f0 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1c400 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1c410 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1c420 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1c430 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1c440 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1c450 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1c460 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1c470 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1c480 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1c490 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1c4a0 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1c4b0 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1c4c0 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1c4d0 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1c4e0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1c4f0 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1c500 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1c510 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1c520 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1c530 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1c540 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1c550 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1c560 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1c570 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1c580 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1c590 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1c5a0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1c5b0 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1c5c0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1c5d0 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1c5e0 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1c5f0 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1c600 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1c610 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1c620 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1c630 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1c640 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1c650 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1c660 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1c670 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c680 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1c690 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c6a0 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1c6b0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1c6c0 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1c6d0 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1c6e0 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1c6f0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1c700 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1c710 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1c720 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c730 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1c740 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1c750 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1c760 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1c770 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1c780 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1c790 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1c7a0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1c7b0 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1c7c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1c7d0 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1c7e0 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1c7f0 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20 20 20  >pBt, .         
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1c810 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1c820 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1c830 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1c840 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1c850 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c860 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c870 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1c880 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a  x->pBt, 1);.  }.
1c890 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1c8a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1c8b0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1c8c0 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1c8d0 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1c8e0 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1c8f0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1c900 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1c910 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1c920 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1c930 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1c940 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1c950 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1c960 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1c970 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1c980 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1c990 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1c9a0 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1c9b0 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1c9c0 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 20    if( (pKeyInfo 
1c9d0 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1c9e0 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1c9f0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1ca00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1ca10 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1ca20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1ca30 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1ca40 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20  Table(pCx->pBt, 
1ca50 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1ca60 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1ca70 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1ca80 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1ca90 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1caa0 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1cab0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1cac0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1cad0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1cae0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1caf0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1cb00 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70  ;.        pCx->p
1cb10 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1cb20 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  fo;.        rc =
1cb30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1cb40 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 70 67  sor(pCx->pBt, pg
1cb50 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c  no, BTREE_WRCSR,
1cb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e   pKeyInfo, pCx->
1cb90 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1cba0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
1cbb0 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
1cbc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1cbd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1cbe0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1cbf0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1cc00 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e          0, pCx->
1cc30 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1cc40 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1cc50 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
1cc60 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20   pCx->isOrdered 
1cc70 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45  = (pOp->p5!=BTRE
1cc80 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20  E_UNORDERED);.  
1cc90 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1cca0 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20  ode: SorterOpen 
1ccb0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1ccc0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1ccd0 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1cce0 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
1ccf0 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1cd00 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
1cd10 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
1cd20 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
1cd30 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
1cd40 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
1cd50 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
1cd60 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
1cd70 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67  hm..**.** If arg
1cd80 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d  ument P3 is non-
1cd90 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e  zero, then it in
1cda0 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65  dicates that the
1cdb0 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61   sorter may.** a
1cdc0 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61  ssume that a sta
1cdd0 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65  ble sort conside
1cde0 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50  ring the first P
1cdf0 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68  3 fields of each
1ce00 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69  .** key is suffi
1ce10 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65  cient to produce
1ce20 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65   the required re
1ce30 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sults..*/.case O
1ce40 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a  P_SorterOpen: {.
1ce50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1ce60 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1ce70 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1ce80 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1ce90 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1cea0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1ceb0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1cec0 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54  -1, CURTYPE_SORT
1ced0 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  ER);.  if( pCx==
1cee0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1cef0 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1cf00 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1cf10 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
1cf20 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
1cf30 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
1cf40 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1cf50 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1cf60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1cf70 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1cf80 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b  , pOp->p3, pCx);
1cf90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1cfa0 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1cfb0 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Test P1 P2 * * *
1cfc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
1cfd0 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ( cursor[P1].ctr
1cfe0 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a  ++ ) pc = P2.**.
1cff0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
1d000 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65  r cursor. If the
1d010 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65   sequence counte
1d020 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
1d030 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  ero, jump.** to 
1d040 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  P2. Regardless o
1d050 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
1d060 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
1d070 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  en, increment th
1d080 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63  e.** the sequenc
1d090 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  e value..*/.case
1d0a0 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74   OP_SequenceTest
1d0b0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1d0c0 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1d0d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1d0e0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1d0f0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1d100 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1d110 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
1d120 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70  (pC) );.  if( (p
1d130 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d  C->seqCount++)==
1d140 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
1d150 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
1d160 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d170 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1d180 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1d190 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c  Synopsis: P3 col
1d1a0 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a  umns in r[P2].**
1d1b0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1d1c0 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1d1d0 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1d1e0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1d1f0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1d200 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1d210 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1d220 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e  e row is the con
1d230 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1d240 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1d250 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1d260 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1d270 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1d280 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1d290 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1d2a0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1d2b0 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1d2c0 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1d2d0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1d2e0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1d2f0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1d300 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1d310 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1d320 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1d330 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1d340 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1d350 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1d360 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1d370 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1d380 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1d390 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1d3a0 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1d3b0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1d3c0 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1d3d0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1d3e0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1d3f0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1d400 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1d410 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1d420 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1d430 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1d440 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1d450 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1d460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d470 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p3>=0 );.  pCx 
1d480 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d490 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1d4a0 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p3, -1, CURTYP
1d4b0 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28  E_PSEUDO);.  if(
1d4c0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1d4d0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1d4e0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1d4f0 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65  ->uc.pseudoTable
1d500 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1d510 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1d520 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
1d530 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65  ->p5==0 );.  bre
1d540 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1d550 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
1d560 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
1d570 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
1d580 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
1d590 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
1d5a0 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
1d5b0 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1d5c0 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
1d5d0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
1d5e0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
1d5f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d600 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d610 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
1d620 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1d630 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
1d640 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
1d650 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
1d660 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
1d670 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1d680 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70  _USED_MASK./* Op
1d690 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65  code: ColumnsUse
1d6a0 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  d P1 * * P4 *.**
1d6b0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1d6c0 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73  (which only exis
1d6d0 74 73 20 69 66 20 53 51 4c 69 74 65 20 77 61 73  ts if SQLite was
1d6e0 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a   compiled with.*
1d6f0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1d700 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1d710 29 20 69 64 65 6e 74 69 66 69 65 73 20 77 68 69  ) identifies whi
1d720 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  ch columns of th
1d730 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  e.** table or in
1d740 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50  dex for cursor P
1d750 31 20 61 72 65 20 75 73 65 64 2e 20 20 50 34 20  1 are used.  P4 
1d760 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  is a 64-bit inte
1d770 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34  ger.** (P4_INT64
1d780 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 66  ) in which the f
1d790 69 72 73 74 20 36 33 20 62 69 74 73 20 61 72 65  irst 63 bits are
1d7a0 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66   one for each of
1d7b0 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33   the.** first 63
1d7c0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
1d7d0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74  table or index t
1d7e0 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79  hat are actually
1d7f0 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1d800 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67  cursor.  The hig
1d810 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73 20 73  h-order bit is s
1d820 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  et if any column
1d830 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34   after.** the 64
1d840 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63  th is used..*/.c
1d850 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73  ase OP_ColumnsUs
1d860 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ed: {.  VdbeCurs
1d870 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70  or *pC;.  pC = p
1d880 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d890 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d8a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1d8b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 2d  E_BTREE );.  pC-
1d8c0 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36  >maskUsed = *(u6
1d8d0 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  4*)pOp->p4.pI64;
1d8e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
1d8f0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
1d900 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50  eekGE P1 P2 P3 P
1d910 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1d920 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1d930 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1d940 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1d950 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1d960 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1d970 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1d980 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1d990 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1d9a0 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1d9b0 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1d9c0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1d9d0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1d9e0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1d9f0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1da00 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1da10 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1da20 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1da30 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1da40 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1da50 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1da60 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1da70 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1da80 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1da90 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1daa0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1dab0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1dac0 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1dad0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1dae0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1daf0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1db00 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
1db10 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
1db20 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
1db30 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
1db40 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
1db50 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
1db60 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
1db70 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
1db80 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
1db90 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
1dba0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1dbb0 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
1dbc0 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
1dbd0 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
1dbe0 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
1dbf0 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
1dc00 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  n IdxLE opcode w
1dc10 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
1dc20 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
1dc30 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxLE opcode will
1dc40 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
1dc50 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
1dc60 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
1dc70 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxLE opcode wil
1dc80 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
1dc90 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
1dca0 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  rations..**.** T
1dcb0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1dcc0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1dcd0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1dce0 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1dcf0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1dd00 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1dd10 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1dd20 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1dd30 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1dd40 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1dd50 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1dd60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1dd70 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1dd80 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
1dd90 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1dda0 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50  : SeekGT P1 P2 P
1ddb0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1ddc0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1ddd0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1dde0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1ddf0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1de00 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1de10 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1de20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1de30 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1de40 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1de50 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1de60 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1de70 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1de80 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1de90 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1dea0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1deb0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1dec0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1ded0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1dee0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1def0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1df00 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1df10 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1df20 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
1df30 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1df40 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1df50 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
1df60 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1df70 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1df80 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1df90 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1dfa0 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1dfb0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1dfc0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1dfd0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1dfe0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1dff0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1e000 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1e010 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1e020 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1e030 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1e040 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1e050 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1e060 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1e070 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1e080 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20   Opcode: SeekLT 
1e090 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
1e0a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e0b0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1e0c0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e0d0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1e0e0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1e0f0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1e100 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1e110 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1e120 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1e130 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e140 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1e150 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1e160 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e170 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1e180 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1e190 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1e1a0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1e1b0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1e1c0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1e1d0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1e1e0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1e1f0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1e200 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1e210 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1e220 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1e230 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1e240 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1e250 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1e260 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e270 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e280 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e290 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e2a0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1e2b0 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1e2c0 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1e2d0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1e2e0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e2f0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e300 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e310 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1e320 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1e330 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e340 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1e350 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1e360 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45  * Opcode: SeekLE
1e370 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1e380 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e390 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1e3a0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e3b0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1e3c0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1e3d0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1e3e0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1e3f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1e400 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1e410 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e420 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1e430 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1e440 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e450 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1e460 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1e470 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1e480 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1e490 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1e4a0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1e4b0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1e4c0 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1e4d0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1e4e0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1e4f0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1e500 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1e510 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1e520 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1e530 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1e540 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1e550 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1e560 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1e570 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1e580 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1e590 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1e5a0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1e5b0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1e5c0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1e5d0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1e5e0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1e5f0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1e600 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1e610 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1e620 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50   If the cursor P
1e630 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69  1 was opened usi
1e640 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45  ng the OPFLAG_SE
1e650 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20  EKEQ flag, then 
1e660 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77  this.** opcode w
1e670 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20  ill always land 
1e680 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  on a record that
1e690 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20   equally equals 
1e6a0 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65  the key, or.** e
1e6b0 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  lse jump immedia
1e6c0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65  tely to P2.  Whe
1e6d0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1e6e0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74  OPFLAG_SEEKEQ, t
1e6f0 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75  his.** opcode mu
1e700 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  st be followed b
1e710 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63 6f 64  y an IdxGE opcod
1e720 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
1e730 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68  arguments..** Th
1e740 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  e IdxGE opcode w
1e750 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69  ill be skipped i
1e760 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75  f this opcode su
1e770 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a  cceeds, but the.
1e780 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  ** IdxGE opcode 
1e790 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20  will be used on 
1e7a0 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20  subsequent loop 
1e7b0 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  iterations..**.*
1e7c0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e7d0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e7e0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1e7f0 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1e800 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f  eekLT:         /
1e810 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e820 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20  ase OP_SeekLE:  
1e830 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e840 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1e850 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
1e860 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e870 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b  ase OP_SeekGT: {
1e880 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e890 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1e8a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
1e8b0 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
1e8c0 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20   */.  int oc;   
1e8d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1e8e0 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  de */.  VdbeCurs
1e8f0 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
1e900 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b  e cursor to seek
1e910 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65   */.  UnpackedRe
1e920 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20  cord r;  /* The 
1e930 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20  key to seek for 
1e940 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
1e950 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e960 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20  r of columns or 
1e970 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65  fields in the ke
1e980 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  y */.  i64 iKey;
1e990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1e9a0 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
1e9b0 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e   seek to */.  in
1e9c0 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20  t eqOnly;       
1e9d0 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73   /* Only interes
1e9e0 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74  ted in == result
1e9f0 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  s */..  assert( 
1ea00 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1ea10 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1ea20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ea30 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1ea40 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1ea50 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1ea60 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1ea70 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
1ea80 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
1ea90 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1eaa0 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1eab0 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1eac0 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1ead0 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1eae0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1eaf0 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1eb00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1eb10 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1eb20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
1eb30 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1eb40 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1eb50 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a  ;.  eqOnly = 0;.
1eb60 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1eb70 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0;.#ifdef SQLITE
1eb80 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
1eb90 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
1eba0 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  e;.#endif..  if(
1ebb0 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1ebc0 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45      /* The BTREE
1ebd0 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73  _SEEK_EQ flag is
1ebe0 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64   only set on ind
1ebf0 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  ex cursors */.  
1ec00 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1ec10 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
1ec20 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
1ec30 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
1ec40 51 29 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 2f 2a  Q)==0 );..    /*
1ec50 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1ec60 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1ec70 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1ec80 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1ec90 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1eca0 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1ecb0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1ecc0 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1ecd0 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1ece0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1ecf0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
1ed00 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1ed10 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
1ed20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
1ed30 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
1ed40 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
1ed50 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
1ed60 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1ed70 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
1ed80 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
1ed90 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1eda0 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
1edb0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1edc0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1edd0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1ede0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1edf0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
1ee00 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
1ee10 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
1ee20 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
1ee30 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
1ee40 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1ee50 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1ee60 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1ee70 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1ee80 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
1ee90 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1eea0 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1eeb0 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1eec0 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1eed0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1eee0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1eef0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1ef00 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1ef10 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1ef20 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70  (1,2); goto jump
1ef30 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
1ef40 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a  break;.      }..
1ef50 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1ef60 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1ef70 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  ey is larger tha
1ef80 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1ef90 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1efa0 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1efb0 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20  te >= for > and 
1efc0 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69  < for <=. e.g. i
1efd0 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72  f the search ter
1efe0 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e  m.      ** is 4.
1eff0 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  9 and the intege
1f000 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  r approximation 
1f010 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  5:.      **.    
1f020 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e    **        (x >
1f030 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20    4.9)    ->    
1f040 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20   (x >= 5).      
1f050 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20  **        (x <= 
1f060 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1f070 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f  x <  5).      */
1f080 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d  .      if( pIn3-
1f090 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r<(double)iKe
1f0a0 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1f0b0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d  ert( OP_SeekGE==
1f0c0 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b  (OP_SeekGT-1) );
1f0d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1f0e0 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f   OP_SeekLT==(OP_
1f0f0 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20  SeekLE-1) );.   
1f100 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1f110 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31  _SeekLE & 0x0001
1f120 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1f130 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1f140 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1f150 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1f160 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d   & 0x0001) ) oc-
1f170 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
1f180 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1f190 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1f1a0 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74  s smaller than t
1f1b0 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1f1c0 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1f1d0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1f1e0 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66  <= for < and > f
1f1f0 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20  or >=.  */.     
1f200 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e   else if( pIn3->
1f210 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r>(double)iKey
1f220 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1f230 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28  rt( OP_SeekLE==(
1f240 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a  OP_SeekLT+1) );.
1f250 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f260 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53  OP_SeekGT==(OP_S
1f270 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20  eekGE+1) );.    
1f280 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1f290 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
1f2a0 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30  ==(OP_SeekGE & 0
1f2b0 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1f2c0 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1f2d0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20  01)==(OP_SeekLT 
1f2e0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b  & 0x0001) ) oc++
1f2f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
1f300 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1f310 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1f320 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
1f330 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1f340 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1f350 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1f360 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
1f370 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
1f380 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  */.    if( rc!=S
1f390 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1f3a0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1f3b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1f3c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1f3d0 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69   For a cursor wi
1f3e0 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45  th the BTREE_SEE
1f3f0 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20  K_EQ hint, only 
1f400 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e  the OP_SeekGE an
1f410 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b  d.    ** OP_Seek
1f420 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61  LE opcodes are a
1f430 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73  llowed, and thes
1f440 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69  e must be immedi
1f450 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20  ately followed. 
1f460 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49     ** by an OP_I
1f470 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54  dxGT or OP_IdxLT
1f480 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74   opcode, respect
1f490 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20  ively, with the 
1f4a0 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f  same key..    */
1f4b0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
1f4c0 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69  BtreeCursorHasHi
1f4d0 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  nt(pC->uc.pCurso
1f4e0 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  r, BTREE_SEEK_EQ
1f4f0 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c  ) ){.      eqOnl
1f500 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  y = 1;.      ass
1f510 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1f520 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70  ==OP_SeekGE || p
1f530 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
1f540 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  eekLE );.      a
1f550 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
1f560 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
1f570 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
1f580 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
1f590 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1f5a0 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20  ].p1==pOp[0].p1 
1f5b0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1f5c0 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b   pOp[1].p2==pOp[
1f5d0 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61  0].p2 );.      a
1f5e0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33  ssert( pOp[1].p3
1f5f0 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20  ==pOp[0].p3 );. 
1f600 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f610 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d  [1].p4.i==pOp[0]
1f620 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a  .p4.i );.    }..
1f630 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1f640 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65  ->p4.i;.    asse
1f650 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1f660 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
1f670 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1f680 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 );.    r.pKeyI
1f690 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1f6a0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1f6b0 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
1f6c0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1f6d0 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
1f6e0 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
1f6f0 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
1f700 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
1f710 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63  =OP_SeekGT || oc
1f720 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20  ==OP_SeekLE ){. 
1f730 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1f740 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20  ult_rc = -1;.   
1f750 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
1f760 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
1f770 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a  t_rc = +1;.    *
1f780 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
1f790 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1f7a0 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53  ((1 & (oc - OP_S
1f7b0 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b  eekLT)) ? -1 : +
1f7c0 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
1f7d0 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc!=OP_SeekGT ||
1f7e0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
1f7f0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1f800 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c   oc!=OP_SeekLE |
1f810 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1f820 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1f830 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc!=OP_SeekGE 
1f840 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1f850 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =+1 );.    asser
1f860 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
1f870 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1f880 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61  ==+1 );..    r.a
1f890 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
1f8a0 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
1f8b0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1f8c0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1f8d0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1f8e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1f8f0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1f900 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
1f910 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65  ExpandBlob(r.aMe
1f920 6d 29 3b 0a 20 20 20 20 72 2e 65 71 53 65 65 6e  m);.    r.eqSeen
1f930 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73   = 0;.    rc = s
1f940 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1f950 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
1f960 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  .pCursor, &r, 0,
1f970 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1f980 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1f990 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1f9a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f9b0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
1f9c0 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53   eqOnly && r.eqS
1f9d0 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  een==0 ){.      
1f9e0 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29  assert( res!=0 )
1f9f0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65  ;.      goto see
1fa00 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  k_not_found;.   
1fa10 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66   }.  }.  pC->def
1fa20 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1fa30 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1fa40 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1fa50 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1fa60 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
1fa70 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1fa80 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
1fa90 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
1faa0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1fab0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
1fac0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
1fad0 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
1fae0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
1faf0 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1fb00 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1fb10 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1fb20 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
1fb30 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1fb40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1fb50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1fb60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1fb70 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
1fb80 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
1fb90 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1fba0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
1fbb0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
1fbc0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
1fbd0 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1fbe0 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
1fbf0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1fc00 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1fc10 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1fc20 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
1fc30 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1fc40 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1fc50 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1fc60 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
1fc70 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73  se{.      /* res
1fc80 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
1fc90 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
1fca0 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
1fcb0 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a  Check to.      *
1fcc0 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
1fcd0 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
1fce0 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20   */.      res = 
1fcf0 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1fd00 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
1fd10 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f  .    }.  }.seek_
1fd20 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73  not_found:.  ass
1fd30 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
1fd40 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
1fd50 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
1fd60 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1fd70 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
1fd80 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f  .  }else if( eqO
1fd90 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72  nly ){.    asser
1fda0 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
1fdb0 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
1fdc0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
1fdd0 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70  IdxGT );.    pOp
1fde0 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20  ++; /* Skip the 
1fdf0 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49  OP_IdxLt or OP_I
1fe00 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77  dxGT that follow
1fe10 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  s */.  }.  break
1fe20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1fe30 53 65 65 6b 20 50 31 20 50 32 20 50 33 20 50 34  Seek P1 P2 P3 P4
1fe40 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1fe50 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a   intkey=r[P2].**
1fe60 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
1fe70 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 61  n table cursor a
1fe80 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69 64  nd P2 is a rowid
1fe90 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61 6e   integer.  Arran
1fea0 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20  ge.** for P1 to 
1feb0 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74 20  move so that it 
1fec0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72 6f  points to the ro
1fed0 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32 2e  wid given by P2.
1fee0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
1fef0 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72 72  ctually a deferr
1ff00 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e  ed seek.  Nothin
1ff10 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70 65  g actually happe
1ff20 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20  ns until.** the 
1ff30 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 74  cursor is used t
1ff40 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64 2e  o read a record.
1ff50 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20 6e    That way, if n
1ff60 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72  o reads.** occur
1ff70 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72 79  , no unnecessary
1ff80 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a   I/O happens..**
1ff90 0a 2a 2a 20 50 34 20 6d 61 79 20 63 6f 6e 74 61  .** P4 may conta
1ffa0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  in an array of i
1ffb0 6e 74 65 67 65 72 73 20 28 74 79 70 65 20 50 34  ntegers (type P4
1ffc0 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61  _INTARRAY) conta
1ffd0 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74  ining.** one ent
1ffe0 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ry for each colu
1fff0 6d 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  mn in the table 
20000 50 31 20 69 73 20 6f 70 65 6e 20 6f 6e 2e 20 49  P1 is open on. I
20010 66 20 73 6f 2c 20 74 68 65 6e 0a 2a 2a 20 70 61  f so, then.** pa
20020 72 61 6d 65 74 65 72 20 50 33 20 69 73 20 61 20  rameter P3 is a 
20030 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
20040 20 64 61 74 61 62 61 73 65 20 69 6e 64 65 78 2e   database index.
20050 20 49 66 20 61 72 72 61 79 20 65 6e 74 72 79 0a   If array entry.
20060 2a 2a 20 61 5b 69 5d 20 69 73 20 6e 6f 6e 2d 7a  ** a[i] is non-z
20070 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69 6e  ero, then readin
20080 67 20 63 6f 6c 75 6d 6e 20 28 61 5b 69 5d 2d 31  g column (a[i]-1
20090 29 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33  ) from cursor P3
200a0 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65   is .** equivale
200b0 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67  nt to performing
200c0 20 74 68 65 20 64 65 66 65 72 72 65 64 20 73 65   the deferred se
200d0 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64  ek and then read
200e0 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a  ing column i .**
200f0 20 66 72 6f 6d 20 50 31 2e 0a 2a 2f 0a 63 61 73   from P1..*/.cas
20100 65 20 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20  e OP_Seek: {    
20110 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
20120 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
20130 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20140 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20150 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20160 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20170 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20180 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
20190 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
201a0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
201b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
201c0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
201d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
201e0 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e  Table );.  pC->n
201f0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49  ullRow = 0;.  pI
20200 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
20210 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74  p2];.  pC->movet
20220 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
20230 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
20240 6e 32 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  n2);.  pC->defer
20250 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
20260 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
20270 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
20280 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d  Y || pOp->p4.ai=
20290 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 61 41 6c 74  =0 );.  pC->aAlt
202a0 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  Map = pOp->p4.ai
202b0 3b 0a 20 20 70 43 2d 3e 70 41 6c 74 43 75 72 73  ;.  pC->pAltCurs
202c0 6f 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  or = p->apCsr[pO
202d0 70 2d 3e 70 33 5d 3b 0a 20 20 62 72 65 61 6b 3b  p->p3];.  break;
202e0 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65  .}.  ../* Opcode
202f0 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
20300 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
20310 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
20320 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
20330 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
20340 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
20350 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
20360 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
20370 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
20380 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
20390 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
203a0 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
203b0 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
203c0 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
203d0 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
203e0 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
203f0 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
20400 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
20410 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
20420 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
20430 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
20440 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
20450 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
20460 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
20470 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
20480 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
20490 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
204a0 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
204b0 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a  where it can be.
204c0 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74  ** advanced in t
204d0 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63  he forward direc
204e0 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20  tion.  The Next 
204f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
20500 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f   work,.** but no
20510 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72  t the Prev instr
20520 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
20530 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
20540 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f  , NoConflict, No
20550 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a  tExists. SeekGe.
20560 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
20570 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
20580 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
20590 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
205a0 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
205b0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
205c0 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
205d0 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
205e0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
205f0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
20600 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
20610 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
20620 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
20630 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
20640 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
20650 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
20660 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
20670 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
20680 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
20690 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72  ** is not the pr
206a0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
206b0 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
206c0 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
206d0 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f  2.  If P1 .** do
206e0 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e  es contain an en
206f0 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78  try whose prefix
20700 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f   matches the P3/
20710 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63  P4 record then c
20720 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20  ontrol.** falls 
20730 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
20740 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
20750 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70  and P1 is left p
20760 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a  ointing at the.*
20770 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  * matching entry
20780 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
20790 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
207a0 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
207b0 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
207c0 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
207d0 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
207e0 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
207f0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
20800 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
20810 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
20820 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
20830 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
20840 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
20850 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66  otExists, NoConf
20860 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lict.*/./* Opcod
20870 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31  e: NoConflict P1
20880 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
20890 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
208a0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
208b0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
208c0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
208d0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
208e0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
208f0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
20900 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
20910 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
20920 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
20930 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
20940 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
20950 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
20960 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
20970 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
20980 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
20990 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69  and P4.** contai
209a0 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75  ns any NULL valu
209b0 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
209c0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61  ely to P2.  If a
209d0 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a  ll terms of the.
209e0 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f  ** record are no
209f0 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68  t-NULL then a ch
20a00 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64  eck is done to d
20a10 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20  etermine if any 
20a20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31  row in the.** P1
20a30 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73   index btree has
20a40 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20   a matching key 
20a50 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72  prefix.  If ther
20a60 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
20a70 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69  , jump.** immedi
20a80 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
20a90 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63   there is a matc
20aa0 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  h, fall through 
20ab0 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31  and leave the P1
20ac0 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  .** cursor point
20ad0 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68  ing to the match
20ae0 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54  ing row..**.** T
20af0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69  his opcode is si
20b00 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46  milar to OP_NotF
20b10 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78  ound with the ex
20b20 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68  ceptions that th
20b30 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61  e.** branch is a
20b40 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61  lways taken if a
20b50 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  ny part of the s
20b60 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20  earch key input 
20b70 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
20b80 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
20b90 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
20ba0 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
20bb0 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
20bc0 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
20bd0 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
20be0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
20bf0 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
20c00 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
20c10 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
20c20 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
20c30 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
20c40 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20  otFound, Found, 
20c50 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73  NotExists.*/.cas
20c60 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a  e OP_NoConflict:
20c70 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
20c80 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  3 */.case OP_Not
20c90 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
20ca0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
20cb0 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
20cc0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
20cd0 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
20ce0 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20  dyExists;.  int 
20cf0 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20  takeJump;.  int 
20d00 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
20d10 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
20d20 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a  .  char *pFree;.
20d30 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
20d40 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
20d50 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
20d60 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52   char aTempRec[R
20d70 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70  OUND8(sizeof(Unp
20d80 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20  ackedRecord)) + 
20d90 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20  sizeof(Mem)*4 + 
20da0 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  7];..#ifdef SQLI
20db0 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f  TE_TEST.  if( pO
20dc0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f  p->opcode!=OP_No
20dd0 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74  Conflict ) sqlit
20de0 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
20df0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65  ;.#endif..  asse
20e00 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
20e10 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
20e20 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
20e30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
20e40 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20  4_INT32 );.  pC 
20e50 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20e60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20e70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
20e80 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
20e90 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
20ea0 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20  opcode;.#endif. 
20eb0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
20ec0 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
20ed0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
20ee0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
20ef0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
20f00 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
20f10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
20f20 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46  Table==0 );.  pF
20f30 72 65 65 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  ree = 0;.  if( p
20f40 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20  Op->p4.i>0 ){.  
20f50 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
20f60 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
20f70 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
20f80 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
20f90 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20  r.aMem = pIn3;. 
20fa0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
20fb0 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  r.nField; ii++){
20fc0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
20fd0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
20fe0 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  m[ii]) );.      
20ff0 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d  ExpandBlob(&r.aM
21000 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20  em[ii]);.#ifdef 
21010 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
21020 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49     if( ii ) REGI
21030 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
21040 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69  p3+ii, &r.aMem[i
21050 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  i]);.#endif.    
21060 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  }.    pIdxKey = 
21070 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  &r;.  }else{.   
21080 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
21090 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63  e3VdbeAllocUnpac
210a0 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20  kedRecord(.     
210b0 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c     pC->pKeyInfo,
210c0 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
210d0 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46  f(aTempRec), &pF
210e0 72 65 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69  ree.    );.    i
210f0 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
21100 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
21110 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
21120 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
21130 29 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  );.    ExpandBlo
21140 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c  b(pIn3);.    sql
21150 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
21160 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
21170 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
21180 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20  ->z, pIdxKey);. 
21190 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65   }.  pIdxKey->de
211a0 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
211b0 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20  takeJump = 0;.  
211c0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
211d0 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
211e0 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65  {.    /* For the
211f0 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f   OP_NoConflict o
21200 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20  pcode, take the 
21210 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74  jump if any of t
21220 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20  he.    ** input 
21230 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c  fields are NULL,
21240 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77   since any key w
21250 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20  ith a NULL will 
21260 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c  not.    ** confl
21270 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ict */.    for(i
21280 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d  i=0; ii<pIdxKey-
21290 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  >nField; ii++){.
212a0 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65        if( pIdxKe
212b0 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67  y->aMem[ii].flag
212c0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
212d0 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75 6d 70          takeJump
212e0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72   = 1;.        br
212f0 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
21300 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71   }.  }.  rc = sq
21310 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
21320 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
21330 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
21340 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
21350 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
21360 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66 28  b, pFree);.  if(
21370 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
21380 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
21390 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
213a0 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61  t = res;.  alrea
213b0 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d  dyExists = (res=
213c0 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  =0);.  pC->nullR
213d0 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78  ow = 1-alreadyEx
213e0 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  ists;.  pC->defe
213f0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
21400 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
21410 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
21420 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
21430 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a  de==OP_Found ){.
21440 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
21450 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74  ken(alreadyExist
21460 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
21470 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29   alreadyExists )
21480 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
21490 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
214a0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74  dbeBranchTaken(t
214b0 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79  akeJump||already
214c0 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20  Exists==0,2);.  
214d0 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c    if( takeJump |
214e0 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73  | !alreadyExists
214f0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
21500 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
21510 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
21520 6f 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50  otExists P1 P2 P
21530 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
21540 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a  s: intkey=r[P3].
21550 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
21560 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f  index of a curso
21570 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c  r open on an SQL
21580 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69   table btree (wi
21590 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65  th integer.** ke
215a0 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69  ys).  P3 is an i
215b0 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49  nteger rowid.  I
215c0 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f  f P1 does not co
215d0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
215e0 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20  ith.** rowid P3 
215f0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
21600 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72  ately to P2.  Or
21610 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61  , if P2 is 0, ra
21620 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ise an.** SQLITE
21630 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
21640 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
21650 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68  in a record with
21660 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a   rowid P3 then .
21670 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  ** leave the cur
21680 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
21690 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
216a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
216b0 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
216c0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
216d0 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
216e0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
216f0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
21700 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
21710 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
21720 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
21730 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
21740 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
21750 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
21760 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
21770 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
21780 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
21790 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
217a0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
217b0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
217c0 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
217d0 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
217e0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
217f0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
21800 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
21810 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73  oConflict.*/.cas
21820 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
21830 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
21840 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
21850 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
21860 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
21870 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
21880 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
21890 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
218a0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
218b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
218c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
218d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
218e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
218f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21900 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21910 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
21920 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21930 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
21940 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  0;.#endif.  asse
21950 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
21960 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21970 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
21980 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
21990 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
219a0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
219b0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
219c0 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
219d0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
219e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
219f0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
21a00 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
21a10 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
21a20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
21a30 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43  | res==0 );.  pC
21a40 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
21a50 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
21a60 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
21a70 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
21a80 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
21a90 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
21aa0 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  LE;.  pC->deferr
21ab0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21ac0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
21ad0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d  res!=0,2);.  pC-
21ae0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
21af0 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  s;.  if( res!=0 
21b00 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
21b10 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
21b20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
21b30 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
21b40 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
21b50 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
21b60 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
21b70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
21b80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21b90 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
21ba0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
21bb0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
21bc0 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b  =cursor[P1].ctr+
21bd0 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  +.**.** Find the
21be0 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
21bf0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
21c00 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
21c10 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
21c20 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
21c30 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
21c40 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
21c50 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
21c60 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
21c70 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
21c80 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
21c90 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
21ca0 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
21cb0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
21cc0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
21cd0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
21ce0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
21cf0 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
21d00 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73  >p1]!=0 );.  ass
21d10 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
21d20 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65  p->p1]->eCurType
21d30 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
21d40 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
21d50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
21d60 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
21d70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21d80 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
21d90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
21da0 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64  Opcode: NewRowid
21db0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
21dc0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
21dd0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74  =rowid.**.** Get
21de0 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72   a new integer r
21df0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e  ecord number (a.
21e00 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65  k.a "rowid") use
21e10 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20  d as the key to 
21e20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  a table..** The 
21e30 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
21e40 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
21e50 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e  used as a key in
21e60 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
21e70 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73   table that curs
21e80 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e  or P1 points to.
21e90 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64    The new record
21ea0 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74   number is writt
21eb0 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f  en.** written to
21ec0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
21ed0 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e  .** If P3>0 then
21ee0 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65   P3 is a registe
21ef0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
21f00 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45  ame of this VDBE
21f10 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20   that holds .** 
21f20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76  the largest prev
21f30 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64  iously generated
21f40 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
21f50 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  No new record nu
21f60 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c  mbers are.** all
21f70 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20  owed to be less 
21f80 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e  than this value.
21f90 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
21fa0 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
21fb0 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c  imum, .** an SQL
21fc0 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69  ITE_FULL error i
21fd0 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65  s generated. The
21fe0 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20   P3 register is 
21ff0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
22000 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20   '.** generated 
22010 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54  record number. T
22020 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d  his P3 mechanism
22030 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
22040 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a   implement the.*
22050 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  * AUTOINCREMENT 
22060 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
22070 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20   OP_NewRowid: { 
22080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
22090 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  2 */.  i64 v;   
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
220b0 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
220c0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
220d0 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
220e0 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
220f0 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
22100 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
22110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22120 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
22130 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
22140 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
22150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22160 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
22170 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
22180 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
22190 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
221a0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
221b0 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
221c0 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
221d0 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
221e0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
221f0 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
22200 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
22210 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
22220 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  0;.  pOut = out2
22230 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
22240 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
22250 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22260 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22270 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22280 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22290 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
222a0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
222b0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
222c0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
222d0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
222e0 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f  !=0 );.  {.    /
222f0 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
22300 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
22310 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
22320 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
22330 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
22340 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
22350 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
22360 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
22370 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
22380 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
22390 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
223a0 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
223b0 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
223c0 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
223d0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
223e0 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
223f0 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
22400 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
22410 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
22420 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
22430 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
22440 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
22450 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
22460 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
22470 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
22480 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
22490 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
224a0 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
224b0 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
224c0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
224d0 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
224e0 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
224f0 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
22500 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
22510 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
22520 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
22530 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
22540 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
22550 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
22560 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
22570 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66  >isTable );..#if
22580 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
22590 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
225a0 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
225b0 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
225c0 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
225d0 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
225e0 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
225f0 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
22600 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
22610 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
22620 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
22630 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
22640 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
22650 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
22660 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
22670 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
22680 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
22690 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
226a0 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
226b0 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
226c0 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
226d0 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
226e0 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
226f0 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
22700 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
22710 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
22720 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
22730 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
22740 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
22750 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
22760 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
22770 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22780 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
22790 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
227a0 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49     v = 1;   /* I
227b0 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37  MP: R-61914-4807
227c0 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  4 */.      }else
227d0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
227e0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
227f0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
22800 75 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  uc.pCursor) );. 
22810 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
22820 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
22830 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
22840 26 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  &v);.        ass
22850 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
22860 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f  OK );   /* Canno
22870 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67  t fail following
22880 20 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a   BtreeLast() */.
22890 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
228a0 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
228b0 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
228c0 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
228d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
228e0 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
228f0 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
22900 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  987 */.        }
22910 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
22920 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
22930 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
22940 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  T.    if( pOp->p
22950 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73  3 ){.      /* As
22960 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
22970 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
22980 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ell. */.      as
22990 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
229a0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
229b0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
229c0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
229d0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
229e0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
229f0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
22a00 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  ;.        /* Ass
22a10 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
22a20 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
22a30 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
22a40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
22a50 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a  pFrame->nMem );.
22a60 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
22a70 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
22a80 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  ->p3];.      }el
22a90 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  se{.        /* A
22aa0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
22ab0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
22ac0 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
22ad0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
22ae0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
22af0 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
22b00 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
22b10 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20  Op->p3];.       
22b20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
22b30 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  e(p, pMem);.    
22b40 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
22b50 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65  ( memIsValid(pMe
22b60 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47  m) );..      REG
22b70 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
22b80 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20  >p3, pMem);.    
22b90 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
22ba0 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29  Integerify(pMem)
22bb0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
22bc0 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d  (pMem->flags & M
22bd0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f  EM_Int)!=0 );  /
22be0 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20  * mem(P3) holds 
22bf0 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20  an integer */.  
22c00 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e      if( pMem->u.
22c10 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20  i==MAX_ROWID || 
22c20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
22c30 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  id ){.        rc
22c40 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
22c50 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37    /* IMP: R-1227
22c60 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20  5-61338 */.     
22c70 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
22c80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
22c90 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c    }.      if( v<
22ca0 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20  pMem->u.i+1 ){. 
22cb0 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d         v = pMem-
22cc0 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20  >u.i + 1;.      
22cd0 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e  }.      pMem->u.
22ce0 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e  i = v;.    }.#en
22cf0 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  dif.    if( pC->
22d00 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
22d10 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45  {.      /* IMPLE
22d20 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
22d30 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74  07677-41881 If t
22d40 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44  he largest ROWID
22d50 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
22d60 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73  .      ** larges
22d70 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67  t possible integ
22d80 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35  er (922337203685
22d90 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68  4775807) then th
22da0 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
22db0 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74   ** engine start
22dc0 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69  s picking positi
22dd0 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57  ve candidate ROW
22de0 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e  IDs at random un
22df0 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20  til.      ** it 
22e00 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69  finds one that i
22e10 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
22e20 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20   used. */.      
22e30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
22e40 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e  =0 );  /* We can
22e50 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d  not be in random
22e60 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74   rowid mode if t
22e70 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20  his is.         
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e90 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e      ** an AUTOIN
22ea0 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a  CREMENT table. *
22eb0 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b  /.      cnt = 0;
22ec0 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
22ed0 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
22ee0 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
22ef0 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20   &v);.        v 
22f00 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31  &= (MAX_ROWID>>1
22f10 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75  ); v++;  /* Ensu
22f20 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65  re that v is gre
22f30 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a  ater than zero *
22f40 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  /.      }while( 
22f50 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42   ((rc = sqlite3B
22f60 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
22f70 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
22f80 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (u64)v,.  
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
22fc0 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
22fd0 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
22fe0 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
22ff0 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
23000 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20  nt<100));.      
23010 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
23020 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K && res==0 ){. 
23030 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
23040 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
23050 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32  P: R-38219-53002
23060 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
23070 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23080 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
23090 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29     assert( v>0 )
230a0 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31  ;  /* EV: R-4081
230b0 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d  2-03570 */.    }
230c0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
230d0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
230e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
230f0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
23100 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
23110 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
23120 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
23130 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
23140 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
23150 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61  ntkey=r[P3] data
23160 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69  =r[P2].**.** Wri
23170 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f  te an entry into
23180 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75   the table of cu
23190 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20  rsor P1.  A new 
231a0 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61  entry is.** crea
231b0 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27  ted if it doesn'
231c0 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20  t already exist 
231d0 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  or the data for 
231e0 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65  an existing.** e
231f0 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74  ntry is overwrit
23200 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69  ten.  The data i
23210 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f  s the value MEM_
23220 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72  Blob stored in r
23230 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  egister.** numbe
23240 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73  r P2. The key is
23250 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
23260 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20  ter P3. The key 
23270 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d  must.** be a MEM
23280 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  _Int..**.** If t
23290 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
232a0 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  E flag of P5 is 
232b0 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  set, then the ro
232c0 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  w change count i
232d0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
232e0 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29   (otherwise not)
232f0 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
23300 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20  _LASTROWID flag 
23310 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a  of P5 is set,.**
23320 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73   then rowid is s
23330 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71  tored for subseq
23340 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74  uent return by t
23350 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61  he.** sqlite3_la
23360 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
23370 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65  ) function (othe
23380 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f  rwise it is unmo
23390 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49  dified)..**.** I
233a0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
233b0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
233c0 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
233d0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   if the result o
233e0 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65  f.** the last se
233f0 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50  ek operation (OP
23400 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20  _NotExists) was 
23410 61 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20  a success, then 
23420 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
23430 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
23440 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
23450 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
23460 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
23470 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
23480 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
23490 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
234a0 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
234b0 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
234c0 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
234d0 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
234e0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70   OP_NotExists op
234f0 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
23500 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
23510 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
23520 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
23530 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
23540 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
23550 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
23560 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
23570 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
23580 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
23590 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
235a0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
235b0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
235c0 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
235d0 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
235e0 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
235f0 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
23600 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
23610 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
23620 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
23630 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
23640 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
23650 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
23660 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
23670 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
23680 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  to a string cont
23690 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65  aining the table
236a0 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79  -name, or.** may
236b0 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
236c0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
236d0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
236e0 6b 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78  k .** (sqlite3.x
236f0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
23700 69 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f  is invoked follo
23710 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
23720 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
23730 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
23740 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
23750 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
23760 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
23770 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
23780 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
23790 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
237a0 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
237b0 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
237c0 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
237d0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
237e0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
237f0 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
23800 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
23810 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
23820 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
23830 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
23840 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
23850 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
23860 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
23870 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
23880 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
23890 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
238a0 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
238b0 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
238c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
238d0 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
238e0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
238f0 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74  :  intkey=P3 dat
23900 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  a=r[P2].**.** Th
23910 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
23920 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
23930 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
23940 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
23950 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
23960 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
23970 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
23980 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
23990 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
239a0 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
239b0 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
239c0 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
239d0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
239e0 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
239f0 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
23a00 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
23a10 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
23a20 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
23a30 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
23a40 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
23a50 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  iKey;         /*
23a60 20 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   The integer ROW
23a70 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68  ID or key for th
23a80 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
23a90 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62  nserted */.  Vdb
23aa0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
23ab0 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
23ac0 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
23ad0 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
23ae0 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20  /.  int nZero;  
23af0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
23b00 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f  of zero-bytes to
23b10 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74   append */.  int
23b20 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f   seekResult;   /
23b30 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f  * Result of prio
23b40 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e  r seek or 0 if n
23b50 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  o USESEEKRESULT 
23b60 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  flag */.  const 
23b70 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64  char *zDb;  /* d
23b80 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75  atabase name - u
23b90 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74  sed by the updat
23ba0 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73  e hook */.  cons
23bb0 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a  t char *zTbl; /*
23bc0 20 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73   Table name - us
23bd0 65 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65  ed by the opdate
23be0 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f   hook */.  int o
23bf0 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
23c00 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74  Opcode for updat
23c10 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55  e hook: SQLITE_U
23c20 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f  PDATE or SQLITE_
23c30 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61  INSERT */..  pDa
23c40 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
23c50 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
23c60 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
23c70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
23c80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
23c90 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
23ca0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23cb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23cc0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23cd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
23ce0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
23cf0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
23d00 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
23d10 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
23d20 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
23d30 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
23d40 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29  (pOp->p2, pData)
23d50 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
23d60 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
23d70 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
23d80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
23d90 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
23da0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
23db0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
23dc0 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
23dd0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
23de0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
23df0 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d  Key);.    iKey =
23e00 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65   pKey->u.i;.  }e
23e10 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
23e20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
23e30 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20  _InsertInt );.  
23e40 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33    iKey = pOp->p3
23e50 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70  ;.  }..  if( pOp
23e60 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
23e70 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
23e80 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
23e90 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
23ea0 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
23eb0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
23ec0 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28  id = iKey;.  if(
23ed0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
23ee0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
23ef0 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20  pData->z = 0;.  
23f00 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a    pData->n = 0;.
23f10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
23f20 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
23f30 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
23f40 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20  M_Str) );.  }.  
23f50 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
23f60 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
23f70 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
23f80 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
23f90 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
23fa0 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
23fb0 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f  ero ){.    nZero
23fc0 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
23fd0 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
23fe0 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
23ff0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24000 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e  eeInsert(pC->uc.
24010 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
24020 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24030 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
24040 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
24050 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
24080 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
24090 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
240a0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
240b0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
240c0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
240d0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
240e0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
240f0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
24100 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
24110 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
24120 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
24130 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
24140 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  {.    zDb = db->
24150 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
24160 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70  me;.    zTbl = p
24170 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70  Op->p4.z;.    op
24180 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
24190 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
241a0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
241b0 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29  : SQLITE_INSERT)
241c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
241d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
241e0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
241f0 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
24200 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54  Arg, op, zDb, zT
24210 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
24220 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
24230 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  0 );.  }.  break
24240 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24250 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50  Delete P1 P2 * P
24260 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  4 P5.**.** Delet
24270 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
24280 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
24290 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
242a0 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
242b0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53   If the OPFLAG_S
242c0 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
242d0 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  of the P5 parame
242e0 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ter is set, then
242f0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77  .** the cursor w
24300 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
24310 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20  ting at  either 
24320 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
24330 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
24340 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
24350 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
24360 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
24370 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
24380 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
24390 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
243a0 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41  ll be a no-op. A
243b0 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74  s a result, in t
243c0 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69  his case.** it i
243d0 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61  s ok to delete a
243e0 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
243f0 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e  hin a Next loop.
24400 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53   If .** OPFLAG_S
24410 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
24420 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20  of P5 is clear, 
24430 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
24440 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20  will be.** left 
24450 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
24460 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  state..**.** If 
24470 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  the OPFLAG_AUXDE
24480 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20  LETE bit is set 
24490 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69  on P5, that indi
244a0 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
244b0 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66  ** delete one of
244c0 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61   several associa
244d0 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e  ted with deletin
244e0 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  g a table row an
244f0 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73  d all its.** ass
24500 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e  ociated index en
24510 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20  tries.  Exactly 
24520 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c  one of those del
24530 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69  etes is the "pri
24540 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e  mary".** delete.
24550 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65    The others are
24560 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46   all on OPFLAG_F
24570 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73  ORDELETE cursors
24580 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20   or else are.** 
24590 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20  marked with the 
245a0 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a  AUXDELETE flag..
245b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
245c0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
245d0 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e   of P2 (NB: P2 n
245e0 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74  ot P5) is set, t
245f0 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63  hen the row.** c
24600 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69  hange count is i
24610 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
24620 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
24630 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
24640 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
24650 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
24660 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
24670 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
24680 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
24690 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69  not NULL, then i
246a0 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  t is the name of
246b0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
246c0 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e  P1 is.** pointin
246d0 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74  g to.  The updat
246e0 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e hook will be i
246f0 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78  nvoked, if it ex
24700 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69  ists..** If P4 i
24710 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
24720 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
24730 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  st have been pos
24740 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67  itioned.** using
24750 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
24760 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
24770 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
24780 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
24790 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
247a0 43 3b 0a 20 20 75 38 20 68 61 73 55 70 64 61 74  C;.  u8 hasUpdat
247b0 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a 20 20 61 73  eCallback;..  as
247c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
247d0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
247e0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
247f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24800 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24810 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
24820 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
24830 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
24840 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
24850 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
24860 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
24870 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
24880 3b 0a 0a 20 20 68 61 73 55 70 64 61 74 65 43 61  ;..  hasUpdateCa
24890 6c 6c 62 61 63 6b 20 3d 20 64 62 2d 3e 78 55 70  llback = db->xUp
248a0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
248b0 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d  pOp->p4.z && pC-
248c0 3e 69 73 54 61 62 6c 65 3b 0a 20 20 69 66 28 20  >isTable;.  if( 
248d0 70 4f 70 2d 3e 70 35 20 26 26 20 68 61 73 55 70  pOp->p5 && hasUp
248e0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 29 7b 0a  dateCallback ){.
248f0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
24900 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70  KeySize(pC->uc.p
24910 43 75 72 73 6f 72 2c 20 26 70 43 2d 3e 6d 6f 76  Cursor, &pC->mov
24920 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 7d 0a  etoTarget);.  }.
24930 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24940 45 42 55 47 0a 20 20 2f 2a 20 54 68 65 20 73 65  EBUG.  /* The se
24950 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61  ek operation tha
24960 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  t positioned the
24970 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f   cursor prior to
24980 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 0a   OP_Delete will.
24990 20 20 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20 73    ** have also s
249a0 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74  et the pC->movet
249b0 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f  oTarget field to
249c0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
249d0 65 20 72 6f 77 20 74 68 61 74 0a 20 20 2a 2a 20  e row that.  ** 
249e0 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  is being deleted
249f0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
24a00 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61 62  4.z && pC->isTab
24a10 6c 65 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30  le && pOp->p5==0
24a20 20 29 7b 0a 20 20 20 20 69 36 34 20 69 4b 65 79   ){.    i64 iKey
24a30 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
24a40 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
24a50 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 69  ->uc.pCursor, &i
24a60 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
24a70 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  ( pC->movetoTarg
24a80 65 74 3d 3d 69 4b 65 79 20 29 3b 20 0a 20 20 7d  et==iKey ); .  }
24a90 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4f 6e  .#endif..  /* On
24aa0 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20 63 61  ly flags that ca
24ab0 6e 20 62 65 20 73 65 74 20 61 72 65 20 53 41 56  n be set are SAV
24ac0 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41 55  EPOISTION and AU
24ad0 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73  XDELETE */ .  as
24ae0 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
24af0 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f   ~(OPFLAG_SAVEPO
24b00 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55  SITION|OPFLAG_AU
24b10 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a  XDELETE))==0 );.
24b20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
24b30 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42  _SAVEPOSITION==B
24b40 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
24b50 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  N );.  assert( O
24b60 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 3d  PFLAG_AUXDELETE=
24b70 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45  =BTREE_AUXDELETE
24b80 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
24b90 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
24ba0 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20  ->pFrame==0 ){. 
24bb0 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70 68     if( pC->isEph
24bc0 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20  emeral==0.      
24bd0 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26 20    && (pOp->p5 & 
24be0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
24bf0 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20  )==0.        && 
24c00 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50  (pC->wrFlag & OP
24c10 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d  FLAG_FORDELETE)=
24c20 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
24c30 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b 2b    nExtraDelete++
24c40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
24c50 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
24c60 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
24c70 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d 2d    nExtraDelete--
24c80 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
24c90 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  if..  rc = sqlit
24ca0 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
24cb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f  ->uc.pCursor, pO
24cc0 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61  p->p5);.  pC->ca
24cd0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24ce0 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
24cf0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
24d00 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
24d10 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
24d20 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 68 61 73  SQLITE_OK && has
24d30 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 29  UpdateCallback )
24d40 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  {.    db->xUpdat
24d50 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
24d60 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45  pdateArg, SQLITE
24d70 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20 20 20  _DELETE,.       
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
24da0 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34  ].zName, pOp->p4
24db0 2e 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  .z, pC->movetoTa
24dc0 72 67 65 74 29 3b 0a 20 20 20 20 61 73 73 65 72  rget);.    asser
24dd0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
24de0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
24df0 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p2 & OPFLAG_NCHA
24e00 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
24e10 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f  ++;.  break;.}./
24e20 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43  * Opcode: ResetC
24e30 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  ount * * * * *.*
24e40 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  *.** The value o
24e50 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  f the change cou
24e60 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74  nter is copied t
24e70 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
24e80 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20  andle.** change 
24e90 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65  counter (returne
24ea0 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
24eb0 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
24ec0 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20  _changes())..** 
24ed0 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74  Then the VMs int
24ee0 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75  ernal change cou
24ef0 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30  nter resets to 0
24f00 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65  ..** This is use
24f10 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
24f20 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  grams..*/.case O
24f30 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a  P_ResetCount: {.
24f40 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
24f50 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
24f60 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43  Change);.  p->nC
24f70 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
24f80 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24f90 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20  : SorterCompare 
24fa0 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
24fb0 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79  ynopsis:  if key
24fc0 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d  (P1)!=trim(r[P3]
24fd0 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
24fe0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
24ff0 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
25000 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
25010 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
25020 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c  the.** record bl
25030 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
25040 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
25050 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
25060 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
25070 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
25080 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
25090 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   Only the first 
250a0 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20  P4 fields.** of 
250b0 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f  r[P3] and the so
250c0 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
250d0 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  compared..**.** 
250e0 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
250f0 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
25100 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
25110 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
25120 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
25130 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
25140 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
25150 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
25160 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
25170 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
25180 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
25190 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
251a0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
251b0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
251c0 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
251d0 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
251e0 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
251f0 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
25200 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
25210 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
25220 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
25230 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
25240 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
25250 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a    int nKeyCol;..
25260 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25270 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25280 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
25290 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
252a0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
252b0 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
252c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
252d0 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d    nKeyCol = pOp-
252e0 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30  >p4.i;.  res = 0
252f0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
25300 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
25310 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79  e(pC, pIn3, nKey
25320 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  Col, &res);.  Vd
25330 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
25340 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
25350 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
25360 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
25370 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
25380 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50  rterData P1 P2 P
25390 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
253a0 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
253b0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
253c0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
253d0 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61  urrent sorter da
253e0 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75  ta for sorter cu
253f0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e  rsor P1..** Then
25400 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d   clear the colum
25410 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f  n header cache o
25420 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a  n cursor P3..**.
25430 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
25440 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74  s normally use t
25450 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20  o move a record 
25460 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65  out of the sorte
25470 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20  r and into.** a 
25480 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73  register that is
25490 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20   the source for 
254a0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
254b0 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73  ursor created us
254c0 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64  ing.** OpenPseud
254d0 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d  o.  That pseudo-
254e0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20  table cursor is 
254f0 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20  the one that is 
25500 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a  identified by.**
25510 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20   parameter P3.  
25520 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20  Clearing the P3 
25530 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20  column cache as 
25540 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63  part of this opc
25550 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20  ode saves.** us 
25560 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69  from having to i
25570 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20  ssue a separate 
25580 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74  NullRow instruct
25590 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61  ion to clear tha
255a0 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65  t cache..*/.case
255b0 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20   OP_SorterData: 
255c0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
255d0 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  pC;..  pOut = &a
255e0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
255f0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25600 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
25610 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
25620 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
25630 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79  VdbeSorterRowkey
25640 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73  (pC, pOut);.  as
25650 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
25660 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c  _OK || (pOut->fl
25670 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20  ags & MEM_Blob) 
25680 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25690 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
256a0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
256b0 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
256c0 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
256d0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
256e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
256f0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
25700 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
25710 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
25720 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
25730 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
25740 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
25750 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f  w data for curso
25760 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
25770 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
25780 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
25790 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
257a0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
257b0 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
257c0 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
257d0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
257e0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
257f0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
25800 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
25810 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
25820 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
25830 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
25840 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
25850 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
25860 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b  ./* Opcode: RowK
25870 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ey P1 P2 * * *.*
25880 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
25890 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ]=key.**.** Writ
258a0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
258b0 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
258c0 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
258d0 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
258e0 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
258f0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
25900 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
25910 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
25920 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
25930 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
25940 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
25950 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
25960 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
25970 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
25980 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
25990 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
259a0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
259b0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
259c0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
259d0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
259e0 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
259f0 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
25a00 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
25a10 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
25a20 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20  n;.  i64 n64;.. 
25a30 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
25a40 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p2];.  memAbo
25a50 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
25a60 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20  ut);..  /* Note 
25a70 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20  that RowKey and 
25a80 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c  RowData are real
25a90 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ly exactly the s
25aa0 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ame instruction 
25ab0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
25ac0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25ad0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25ae0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25af0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25b00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25b10 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
25b20 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
25b30 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
25b40 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30   isSorter(pC)==0
25b50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25b60 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70  ->isTable || pOp
25b70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77  ->opcode!=OP_Row
25b80 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74  Data );.  assert
25b90 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
25ba0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
25bb0 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
25bc0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
25bd0 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
25be0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
25bf0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
25c00 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
25c10 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50  or;..  /* The OP
25c20 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52  _RowKey and OP_R
25c30 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61  owData opcodes a
25c40 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f  lways follow OP_
25c50 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a  NotExists or.  *
25c60 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e  * OP_Rewind/Op_N
25c70 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65  ext with no inte
25c80 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74  rvening instruct
25c90 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
25ca0 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20  invalidate.  ** 
25cb0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 49 66 20  the cursor.  If 
25cc0 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74  this where not t
25cd0 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74  he case, on of t
25ce0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73  he following ass
25cf0 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c  ert()s.  ** woul
25d00 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20  d fail.  Should 
25d10 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67 65  this ever change
25d20 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68 61   (because of cha
25d30 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65  nges in the code
25d40 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29  .  ** generator)
25d50 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f   then the fix wo
25d60 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74  uld be to insert
25d70 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20   a call to.  ** 
25d80 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
25d90 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a  rMoveto()..  */.
25da0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
25db0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
25dc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
25dd0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
25de0 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
25df0 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72  .#if 0  /* Not r
25e00 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20 74  equired due to t
25e10 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61  he previous to a
25e20 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
25e30 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ts */.  rc = sql
25e40 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
25e50 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
25e60 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
25e70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25e80 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a  o_error;.#endif.
25e90 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
25ea0 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  le==0 ){.    ass
25eb0 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c  ert( !pC->isTabl
25ec0 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  e );.    VVA_ONL
25ed0 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
25ee0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
25ef0 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73  r, &n64);.    as
25f00 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
25f10 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75  _OK );    /* Tru
25f20 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
25f30 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
25f40 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66   above */.    if
25f50 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74  ( n64>db->aLimit
25f60 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
25f70 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
25f80 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
25f90 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29   }.    n = (u32)
25fa0 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n64;.  }else{.  
25fb0 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
25fc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
25fd0 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29  aSize(pCrsr, &n)
25fe0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
25ff0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
26000 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
26010 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
26020 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62     if( n>(u32)db
26030 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
26040 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
26050 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
26060 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  big;.    }.  }. 
26070 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20   testcase( n==0 
26080 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
26090 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
260a0 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d 41 58 28  esize(pOut, MAX(
260b0 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20 20 67 6f  n,32)) ){.    go
260c0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
260d0 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20   pOut->n = n;.  
260e0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
260f0 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  Out, MEM_Blob);.
26100 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
26110 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  e==0 ){.    rc =
26120 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
26130 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
26140 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  ut->z);.  }else{
26150 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
26160 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
26170 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
26180 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
26190 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
261a0 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
261b0 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
261c0 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
261d0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
261e0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
261f0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
26200 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
26210 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26220 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
26230 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
26240 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
26250 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
26260 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
26270 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
26280 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
26290 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
262a0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
262b0 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
262c0 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
262d0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
262e0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
262f0 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
26300 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
26310 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
26320 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
26330 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
26340 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
26350 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
26360 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
26370 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
26380 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
263b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
263c0 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
263d0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
263e0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
263f0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
26400 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
26410 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
26420 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26430 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26440 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26450 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26460 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26470 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
26480 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26490 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
264a0 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
264b0 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
264c0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
264d0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
264e0 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
264f0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
26500 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
26510 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
26520 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
26530 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26540 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
26550 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75  else if( pC->eCu
26560 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
26570 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72  TAB ){.    asser
26580 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21  t( pC->uc.pVCur!
26590 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20  =0 );.    pVtab 
265a0 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  = pC->uc.pVCur->
265b0 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
265c0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
265d0 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
265e0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
265f0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
26600 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
26610 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a  >uc.pVCur, &v);.
26620 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
26630 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
26640 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  Vtab);.#endif /*
26650 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
26660 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
26670 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
26680 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
26690 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
266a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
266b0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
266c0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
266d0 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
266e0 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28  ore(pC);.    if(
266f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
26700 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
26710 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
26720 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ow ){.      pOut
26730 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
26740 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ll;.      break;
26750 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20  .    }.    rc = 
26760 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
26770 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ize(pC->uc.pCurs
26780 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 61 73 73  or, &v);.    ass
26790 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
267a0 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73  OK );  /* Always
267b0 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43   so because of C
267c0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61  ursorRestore() a
267d0 62 6f 76 65 20 2a 2f 0a 20 20 7d 0a 20 20 70 4f  bove */.  }.  pO
267e0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
267f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
26800 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a  de: NullRow P1 *
26810 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76   * * *.**.** Mov
26820 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  e the cursor P1 
26830 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20  to a null row.  
26840 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  Any OP_Column op
26850 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74  erations.** that
26860 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
26870 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68   cursor is on th
26880 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20  e null row will 
26890 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20  always.** write 
268a0 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  a NULL..*/.case 
268b0 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20  OP_NullRow: {.  
268c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
268d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
268e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
268f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
26900 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26910 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26920 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
26930 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
26940 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
26950 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
26960 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
26970 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
26980 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E ){.    assert(
26990 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
269a0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
269b0 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f  3BtreeClearCurso
269c0 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  r(pC->uc.pCursor
269d0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
269e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61  }../* Opcode: La
269f0 73 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  st P1 P2 P3 * *.
26a00 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
26a10 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
26a20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65  or Column or Pre
26a30 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  v instruction fo
26a40 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
26a50 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
26a60 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
26a70 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
26a80 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
26a90 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
26aa0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
26ab0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
26ac0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
26ad0 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
26ae0 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
26af0 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
26b00 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
26b10 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
26b20 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
26b30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
26b40 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
26b50 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
26b60 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
26b70 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
26b80 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
26b90 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
26ba0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
26bb0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
26bc0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
26bd0 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
26be0 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ext..*/.case OP_
26bf0 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
26c00 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
26c10 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
26c20 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
26c30 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
26c40 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
26c50 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
26c60 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
26c70 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26c80 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
26c90 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
26ca0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
26cb0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
26cc0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
26cd0 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d  pCursor;.  res =
26ce0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
26cf0 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  rsr!=0 );.  rc =
26d00 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
26d10 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
26d20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
26d30 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64  (u8)res;.  pC->d
26d40 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
26d50 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
26d60 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
26d70 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65  LE;.  pC->seekRe
26d80 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  sult = pOp->p3;.
26d90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26da0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
26db0 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64   = OP_Last;.#end
26dc0 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  if.  if( pOp->p2
26dd0 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  >0 ){.    VdbeBr
26de0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
26df0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  ,2);.    if( res
26e00 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
26e10 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
26e20 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
26e30 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
26e40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
26e50 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
26e60 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
26e70 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
26e80 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
26e90 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
26ea0 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
26eb0 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
26ec0 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
26ed0 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
26ee0 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
26ef0 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
26f00 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
26f10 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
26f20 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
26f30 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
26f40 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
26f50 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
26f60 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
26f70 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
26f80 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
26f90 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
26fa0 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
26fb0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
26fc0 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
26fd0 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
26fe0 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
26ff0 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
27000 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
27010 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
27020 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
27030 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
27040 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f  case OP_SorterSo
27050 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  rt:    /* jump *
27060 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20  /.case OP_Sort: 
27070 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
27080 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
27090 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
270a0 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20  _sort_count++;. 
270b0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
270c0 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a  count--;.#endif.
270d0 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
270e0 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
270f0 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61  SORT]++;.  /* Fa
27100 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
27110 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f  OP_Rewind */.}./
27120 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64  * Opcode: Rewind
27130 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
27140 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
27150 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
27160 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
27170 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
27180 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
27190 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
271a0 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
271b0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
271c0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
271d0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
271e0 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65  empty, jump imme
271f0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
27200 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
27210 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
27220 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
27230 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  gh to the follow
27240 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ing .** instruct
27250 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
27260 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
27270 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
27280 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
27290 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
272a0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
272b0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
272c0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
272d0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
272e0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
272f0 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
27300 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20  t Prev..*/.case 
27310 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
27320 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
27330 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
27340 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
27350 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
27360 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27370 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27380 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27390 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
273a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
273b0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
273c0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
273d0 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
273e0 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20  =OP_SorterSort) 
273f0 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69  );.  res = 1;.#i
27400 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
27410 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
27420 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64   OP_Rewind;.#end
27430 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  if.  if( isSorte
27440 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
27450 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
27460 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72  terRewind(pC, &r
27470 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
27480 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
27490 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
274a0 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43 72  BTREE );.    pCr
274b0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
274c0 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
274d0 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
274e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
274f0 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
27500 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
27510 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
27520 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
27530 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
27540 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
27550 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
27560 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
27570 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
27580 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72  >nOp );.  VdbeBr
27590 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
275a0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
275b0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
275c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
275d0 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
275e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
275f0 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
27600 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
27610 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
27620 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
27630 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
27640 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
27650 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
27660 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
27670 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
27680 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
27690 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
276a0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
276b0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
276c0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
276d0 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
276e0 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
276f0 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
27700 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
27710 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47  llowing an SeekG
27720 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a  T, SeekGE, or.**
27730 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64   OP_Rewind opcod
27740 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
27750 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
27760 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Next is not allo
27770 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
27780 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
27790 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a   or OP_Last..**.
277a0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
277b0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
277c0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
277d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
277e0 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  P1 must have.** 
277f0 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f  been opened prio
27800 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  r to this opcode
27810 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20   or the program 
27820 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a  will segfault..*
27830 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
27840 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
27850 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
27860 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
27870 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
27880 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
27890 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
278a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
278b0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
278c0 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
278d0 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
278e0 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
278f0 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
27900 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
27910 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
27920 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
27930 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
27940 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
27950 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
27960 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
27970 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
27980 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
27990 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
279a0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
279b0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
279c0 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
279d0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
279e0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
279f0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
27a00 3a 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70  : Prev, NextIfOp
27a10 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  en.*/./* Opcode:
27a20 20 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50   NextIfOpen P1 P
27a30 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
27a40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
27a50 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78  ks just like Nex
27a60 74 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  t except that if
27a70 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
27a80 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
27a90 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
27aa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
27ab0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27ac0 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
27ad0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
27ae0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
27af0 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
27b00 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
27b10 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
27b20 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
27b30 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
27b40 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
27b50 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
27b60 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
27b70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
27b80 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
27b90 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
27ba0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
27bb0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
27bc0 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2..**.**.** The 
27bd0 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
27be0 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
27bf0 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53  ing an SeekLT, S
27c00 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekLE, or.** OP_
27c10 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64  Last opcode used
27c20 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
27c30 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69   cursor.  Prev i
27c40 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
27c50 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47   to follow SeekG
27c60 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50  T, SeekGE, or OP
27c70 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54  _Rewind..**.** T
27c80 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
27c90 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
27ca0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
27cb0 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50  udo-table.  If P
27cc0 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e  1 is.** not open
27cd0 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
27ce0 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
27cf0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61  .**.** The P3 va
27d00 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f  lue is a hint to
27d10 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65   the btree imple
27d20 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33  mentation. If P3
27d30 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61  ==1, that.** mea
27d40 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20  ns P1 is an SQL 
27d50 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74  index and that t
27d60 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
27d70 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  could have been.
27d80 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68  ** omitted if th
27d90 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65  at index had bee
27da0 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73  n unique.  P3 is
27db0 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20   usually 0.  P3 
27dc0 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74  is.** always eit
27dd0 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a  her 0 or 1..**.*
27de0 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
27df0 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
27e00 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
27e10 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
27e20 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
27e30 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a  ePrevious()..**.
27e40 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
27e50 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
27e60 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
27e70 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
27e80 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
27e90 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
27ea0 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
27eb0 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mented..*/./* Op
27ec0 63 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e  code: PrevIfOpen
27ed0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27ee0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
27ef0 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
27f00 65 20 50 72 65 76 20 65 78 63 65 70 74 20 74 68  e Prev except th
27f10 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
27f20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
27f30 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
27f40 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  p..*/.case OP_So
27f50 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20  rterNext: {  /* 
27f60 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
27f70 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
27f80 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  res;..  pC = p->
27f90 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27fa0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
27fb0 65 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20  er(pC) );.  res 
27fc0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
27fd0 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
27fe0 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b  t(db, pC, &res);
27ff0 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69  .  goto next_tai
28000 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49  l;.case OP_PrevI
28010 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
28020 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
28030 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  tIfOpen:    /* j
28040 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e  ump */.  if( p->
28050 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d  apCsr[pOp->p1]==
28060 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
28070 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a  Fall through */.
28080 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
28090 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
280a0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
280b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
280c0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
280d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
280e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
280f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28100 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  >p5<ArraySize(p-
28110 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
28120 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28130 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20  p->p1];.  res = 
28140 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
28150 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
28160 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
28170 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
28180 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
28190 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
281a0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
281b0 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73  ( res==0 || (res
281c0 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62  ==1 && pC->isTab
281d0 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74  le==0) );.  test
281e0 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a  case( res==1 );.
281f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
28200 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
28210 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
28220 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
28230 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
28240 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
28250 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
28260 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
28270 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
28280 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28290 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
282a0 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d  xtIfOpen || pOp-
282b0 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
282c0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
282d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
282e0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
282f0 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70  IfOpen || pOp->p
28300 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
28310 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
28320 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78  );..  /* The Nex
28330 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
28340 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
28350 47 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20  GT, SeekGE, and 
28360 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65  Rewind..  ** The
28370 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20   Prev opcode is 
28380 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20  only used after 
28390 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
283a0 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61  and Last. */.  a
283b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
283c0 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
283d0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
283e0 65 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20  extIfOpen.      
283f0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
28400 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d  OP_SeekGT || pC-
28410 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
28420 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  GE.       || pC-
28430 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69  >seekOp==OP_Rewi
28440 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  nd || pC->seekOp
28450 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61  ==OP_Found);.  a
28460 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28470 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
28480 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
28490 72 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20  revIfOpen.      
284a0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
284b0 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d  OP_SeekLT || pC-
284c0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
284d0 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  LE.       || pC-
284e0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74  >seekOp==OP_Last
284f0 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d   );..  rc = pOp-
28500 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
28510 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
28520 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20  s);.next_tail:. 
28530 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
28540 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
28550 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
28560 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69  n(res==0,2);.  i
28570 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
28580 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
28590 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65  ;.    p->aCounte
285a0 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69  r[pOp->p5]++;.#i
285b0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
285c0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
285d0 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
285e0 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  dif.    goto jum
285f0 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
28600 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
28610 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
28620 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
28630 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
28640 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
28650 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
28660 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
28670 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P5.** Synopsis
28680 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  : key=r[P2].**.*
28690 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
286a0 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
286b0 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
286c0 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
286d0 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
286e0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
286f0 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
28700 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50  into the index P
28710 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
28720 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
28730 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61  *.** P3 is a fla
28740 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20  g that provides 
28750 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
28760 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20  tree layer that 
28770 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69  this.** insert i
28780 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
28790 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
287a0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
287b0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
287c0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
287d0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
287e0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
287f0 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
28800 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ion.  If the OPF
28810 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
28820 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65  is clear,.** the
28830 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
28840 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65  nter is unchange
28850 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
28860 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  as the OPFLAG_US
28870 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74 20  ESEEKRESULT bit 
28880 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 75  set, then the cu
28890 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a 2a  rsor must have.*
288a0 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73 65  * just done a se
288b0 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20 77  ek to the spot w
288c0 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e 74  here the new ent
288d0 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73 65  ry is to be inse
288e0 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c  rted..** This fl
288f0 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67 20  ag avoids doing 
28900 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a  an extra seek..*
28910 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
28920 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
28930 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
28940 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
28950 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
28960 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
28970 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
28980 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
28990 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
289a0 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
289b0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
289c0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
289d0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 6e 4b 65  r *pC;.  int nKe
289e0 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  y;.  const char 
289f0 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74  *zKey;..  assert
28a00 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28a10 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28a20 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28a30 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28a40 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28a50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
28a60 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
28a70 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
28a80 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
28a90 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
28aa0 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
28ab0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
28ac0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20  M_Blob );.  if( 
28ad0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
28ae0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
28af0 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
28b00 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
28b10 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c  =CURTYPE_BTREE |
28b20 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
28b30 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29  P_SorterInsert )
28b40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28b50 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
28b60 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
28b70 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  pIn2);.  if( rc=
28b80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
28b90 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
28ba0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
28bb0 72 74 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  rt ){.      rc =
28bc0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
28bd0 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32  erWrite(pC, pIn2
28be0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
28bf0 20 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d      nKey = pIn2-
28c00 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65 79 20 3d  >n;.      zKey =
28c10 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 20 20   pIn2->z;.      
28c20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28c30 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
28c40 43 75 72 73 6f 72 2c 20 7a 4b 65 79 2c 20 6e 4b  Cursor, zKey, nK
28c50 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f  ey, "", 0, 0, pO
28c60 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20  p->p3, .        
28c70 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
28c80 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
28c90 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
28ca0 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
28cb0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73      );.      ass
28cc0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
28cd0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
28ce0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
28cf0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
28d00 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  E;.    }.  }.  b
28d10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28d20 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
28d30 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
28d40 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
28d50 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
28d60 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
28d70 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
28d80 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
28d90 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
28da0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
28db0 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
28dc0 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
28dd0 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
28de0 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
28df0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
28e00 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
28e10 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
28e20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
28e30 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
28e40 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
28e50 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
28e60 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
28e70 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
28e80 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
28e90 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
28ea0 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73  rsor)+1 );.  ass
28eb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
28ec0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
28ed0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
28ee0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
28ef0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
28f00 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28f10 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
28f20 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
28f30 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
28f40 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
28f50 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
28f60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
28f70 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
28f80 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
28f90 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
28fa0 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
28fb0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
28fc0 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
28fd0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
28fe0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
28ff0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
29000 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c  pCrsr, &r, 0, 0,
29010 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63   &res);.  if( rc
29020 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
29030 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  es==0 ){.    rc 
29040 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
29050 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45  lete(pCrsr, BTRE
29060 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20  E_AUXDELETE);.  
29070 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  }.  assert( pC->
29080 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
29090 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  0 );.  pC->cache
290a0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
290b0 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
290c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
290d0 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
290e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
290f0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
29100 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
29110 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
29120 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
29130 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
29140 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
29150 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
29160 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
29170 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
29180 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
29190 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
291a0 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
291b0 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
291c0 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
291d0 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
291e0 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
291f0 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
29200 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69  .case OP_IdxRowi
29210 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
29220 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42    /* out2 */.  B
29230 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
29240 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
29250 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a  ;.  i64 rowid;..
29260 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
29270 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
29280 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29290 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
292a0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
292b0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
292c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
292d0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
292e0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
292f0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
29300 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
29310 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
29320 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
29330 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
29340 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
29350 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
29360 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
29370 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
29380 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20  dMoveto==0 );.. 
29390 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75   /* sqlite3VbeCu
293a0 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61  rsorRestore() ca
293b0 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74  n only fail if t
293c0 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65  he record has be
293d0 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20  en deleted.  ** 
293e0 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74  out from under t
293f0 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74  he cursor.  That
29400 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70   will never happ
29410 65 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f  end for an IdxRo
29420 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c  wid.  ** opcode,
29430 20 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52   hence the NEVER
29440 28 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63  () arround the c
29450 68 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75  heck of the retu
29460 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  rn value..  */. 
29470 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
29480 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70  eCursorRestore(p
29490 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  C);.  if( NEVER(
294a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
294b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
294c0 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28  to_error;..  if(
294d0 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b   !pC->nullRow ){
294e0 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20  .    rowid = 0; 
294f0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
29500 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
29510 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
29520 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
29530 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
29540 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77  (db, pCrsr, &row
29550 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  id);.    if( rc!
29560 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
29570 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
29580 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
29590 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
295a0 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f   = rowid;.    pO
295b0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
295c0 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  Int;.  }.  break
295d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
295e0 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
295f0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
29600 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
29610 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
29620 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
29630 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
29640 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
29650 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
29660 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
29670 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
29680 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
29690 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
296a0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
296b0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
296c0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
296d0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
296e0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
296f0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
29700 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
29710 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
29720 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
29730 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
29740 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
29750 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
29760 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
29770 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
29780 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
29790 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54  /* Opcode: IdxGT
297a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
297b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
297c0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
297d0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
297e0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
297f0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
29800 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
29810 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
29820 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
29830 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
29840 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
29850 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
29860 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
29870 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
29880 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
29890 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
298a0 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
298b0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
298c0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
298d0 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
298e0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
298f0 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
29900 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
29910 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
29920 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
29930 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
29940 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
29950 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
29960 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
29970 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
29980 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
29990 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
299a0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
299b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
299c0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
299d0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
299e0 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
299f0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
29a00 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
29a10 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
29a20 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
29a30 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
29a40 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
29a50 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
29a60 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
29a70 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
29a80 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
29a90 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
29aa0 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
29ab0 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
29ac0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
29ad0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
29ae0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
29af0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20  * Opcode: IdxLE 
29b00 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
29b10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
29b20 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
29b30 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
29b40 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
29b50 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
29b60 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
29b70 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
29b80 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
29b90 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
29ba0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
29bb0 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
29bc0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
29bd0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
29be0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
29bf0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
29c00 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
29c10 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
29c20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
29c30 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
29c40 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
29c50 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
29c60 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a  lue then jump.**
29c70 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
29c80 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
29c90 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
29ca0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
29cb0 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20  OP_IdxLE:       
29cc0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
29cd0 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20  se OP_IdxGT:    
29ce0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
29cf0 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
29d00 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
29d10 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
29d20 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  E:  {       /* j
29d30 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
29d40 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
29d50 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
29d60 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
29d70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29d80 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
29d90 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
29da0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
29db0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
29dc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
29dd0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
29de0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
29df0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
29e00 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
29e10 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
29e20 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  !=0);.  assert( 
29e30 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
29e40 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
29e50 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
29e60 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
29e70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
29e80 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
29e90 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
29ea0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
29eb0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
29ec0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66  )pOp->p4.i;.  if
29ed0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50  ( pOp->opcode<OP
29ee0 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73  _IdxLT ){.    as
29ef0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29f00 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
29f10 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
29f20 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxGT );.    r.de
29f30 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
29f40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
29f50 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
29f60 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
29f70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
29f80 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  LT );.    r.defa
29f90 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a  ult_rc = 0;.  }.
29fa0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
29fb0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
29fc0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
29fd0 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
29fe0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
29ff0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
2a000 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
2a010 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
2a020 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   res = 0;  /* No
2a030 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2a040 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2a050 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2a060 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2a070 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62  IdxKeyCompare(db
2a080 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  , pC, &r, &res);
2a090 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
2a0a0 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
2a0b0 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
2a0c0 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
2a0d0 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
2a0e0 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
2a0f0 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
2a100 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2a110 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2a120 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2a130 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2a140 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
2a150 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2a160 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2a170 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
2a180 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
2a190 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
2a1a0 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
2a1b0 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
2a1c0 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f  if( res>0 ) goto
2a1d0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
2a1e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a1f0 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
2a200 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
2a210 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
2a220 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
2a230 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
2a240 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
2a250 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
2a260 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
2a270 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2a280 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
2a290 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
2a2a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2a2b0 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
2a2c0 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
2a2d0 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
2a2e0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
2a2f0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2a300 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
2a310 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
2a320 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
2a330 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
2a340 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
2a350 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
2a360 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
2a370 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
2a380 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
2a390 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
2a3a0 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
2a3b0 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
2a3c0 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
2a3d0 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
2a3e0 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
2a3f0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
2a400 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
2a410 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
2a420 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
2a430 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
2a440 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
2a450 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
2a460 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
2a470 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2a480 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
2a490 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
2a4a0 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
2a4b0 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
2a4c0 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
2a4d0 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
2a4e0 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2a4f0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2a500 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
2a510 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2a520 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
2a530 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
2a540 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
2a550 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2a560 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
2a570 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
2a580 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
2a590 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f  {     /* out2 */
2a5a0 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
2a5b0 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
2a5c0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2a5d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2a5e0 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20   pOp->p1>1 );.  
2a5f0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2a600 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2a610 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2a620 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64  EM_Null;.  if( d
2a630 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64  b->nVdbeRead > d
2a640 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29  b->nVDestroy+1 )
2a650 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2a660 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
2a670 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
2a680 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
2a690 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
2a6a0 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
2a6b0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2a6c0 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
2a6d0 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
2a6e0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2a6f0 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
2a700 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2a710 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2a720 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
2a730 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
2a740 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
2a750 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
2a760 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
2a770 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
2a780 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
2a790 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2a7a0 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
2a7b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
2a7c0 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
2a7d0 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
2a7e0 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
2a7f0 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
2a800 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
2a810 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
2a820 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
2a830 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
2a840 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
2a850 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2a860 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
2a870 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
2a880 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
2a890 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
2a8a0 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
2a8b0 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
2a8c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2a8d0 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
2a8e0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
2a8f0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
2a900 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
2a910 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
2a920 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
2a930 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2a940 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
2a950 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
2a960 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
2a970 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
2a980 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
2a990 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2a9a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
2a9b0 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
2a9c0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
2a9d0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
2a9e0 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
2a9f0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2aa00 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
2aa10 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2aa20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
2aa30 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2aa40 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
2aa50 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
2aa60 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
2aa70 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
2aa80 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
2aa90 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
2aaa0 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
2aab0 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
2aac0 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
2aad0 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
2aae0 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
2aaf0 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
2ab00 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
2ab10 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
2ab20 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
2ab30 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2ab40 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
2ab50 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
2ab60 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
2ab70 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
2ab80 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2ab90 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
2aba0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2abb0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2abc0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2abd0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
2abe0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
2abf0 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
2ac00 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
2ac10 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
2ac20 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
2ac30 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2ac40 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2ac50 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2ac60 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
2ac70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
2ac80 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
2ac90 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
2aca0 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
2acb0 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
2acc0 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
2acd0 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
2ace0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
2acf0 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
2ad00 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
2ad10 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
2ad20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2ad30 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
2ad40 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
2ad50 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
2ad60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
2ad70 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
2ad80 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
2ad90 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
2ada0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2adb0 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72  ode: ResetSorter
2adc0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2add0 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
2ade0 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65  tents from the e
2adf0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f  phemeral table o
2ae00 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74  r sorter.** that
2ae10 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73   is open on curs
2ae20 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P1..**.** Thi
2ae30 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f  s opcode only wo
2ae40 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  rks for cursors 
2ae50 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
2ae60 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77   and.** opened w
2ae70 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ith OP_OpenEphem
2ae80 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  eral or OP_Sorte
2ae90 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rOpen..*/.case O
2aea0 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b  P_ResetSorter: {
2aeb0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2aec0 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70  C;. .  assert( p
2aed0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2aee0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2aef0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2af00 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2af10 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2af20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
2af30 43 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  C) ){.    sqlite
2af40 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74  3VdbeSorterReset
2af50 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72  (db, pC->uc.pSor
2af60 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ter);.  }else{. 
2af70 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
2af80 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2af90 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
2afa0 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65  sert( pC->isEphe
2afb0 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20  meral );.    rc 
2afc0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
2afd0 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72  earTableOfCursor
2afe0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
2aff0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2b000 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
2b010 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
2b020 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2b030 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
2b040 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
2b050 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
2b060 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2b070 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2b080 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
2b090 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2b0a0 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2b0b0 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2b0c0 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2b0d0 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
2b0e0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2b0f0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
2b100 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
2b110 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
2b120 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
2b130 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
2b140 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
2b150 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
2b160 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
2b170 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
2b180 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
2b190 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
2b1a0 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
2b1b0 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
2b1c0 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
2b1d0 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
2b1e0 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
2b1f0 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
2b200 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2b210 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2b220 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
2b230 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
2b240 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
2b250 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2b260 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
2b270 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
2b280 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2b290 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
2b2a0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2b2b0 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
2b2c0 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
2b2d0 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
2b2e0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
2b2f0 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
2b300 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
2b310 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
2b320 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
2b330 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
2b340 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2b350 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
2b360 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2b370 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
2b380 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
2b390 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2b3a0 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
2b3b0 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
2b3c0 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  b;..  pOut = out
2b3d0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2b3e0 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Op);.  pgno = 0;
2b3f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b400 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2b410 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2b420 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2b430 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2b440 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
2b450 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2b460 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
2b470 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2b480 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
2b490 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28  >pBt!=0 );.  if(
2b4a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2b4b0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a  _CreateTable ){.
2b4c0 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42      /* flags = B
2b4d0 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a  TREE_INTKEY; */.
2b4e0 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
2b4f0 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73  E_INTKEY;.  }els
2b500 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  e{.    flags = B
2b510 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20  TREE_BLOBKEY;.  
2b520 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
2b530 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
2b540 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
2b550 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74  , flags);.  pOut
2b560 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
2b570 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b580 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
2b590 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2b5a0 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  ** Read and pars
2b5b0 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72  e all entries fr
2b5c0 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  om the SQLITE_MA
2b5d0 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61  STER table of da
2b5e0 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61  tabase P1.** tha
2b5f0 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52  t match the WHER
2b600 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a  E clause P4. .**
2b610 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2b620 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
2b630 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
2b640 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
2b650 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
2b660 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
2b670 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
2b680 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
2b690 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
2b6a0 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
2b6b0 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
2b6c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
2b6d0 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
2b6e0 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
2b6f0 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20  initData;..  /* 
2b700 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61  Any prepared sta
2b710 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f  tement that invo
2b720 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20  kes this opcode 
2b730 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65  will hold mutexe
2b740 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20  s.  ** on every 
2b750 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20  btree.  This is 
2b760 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66  a prerequisite f
2b770 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a  or invoking .  *
2b780 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  * sqlite3InitCal
2b790 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69  lback()..  */.#i
2b7a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2b7b0 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69  G.  for(iDb=0; i
2b7c0 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b  Db<db->nDb; iDb+
2b7d0 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
2b7e0 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65  iDb==1 || sqlite
2b7f0 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
2b800 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
2b810 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t) );.  }.#endif
2b820 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
2b830 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
2b840 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
2b850 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2b860 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
2b870 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
2b880 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20  Loaded) );.  /* 
2b890 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e  Used to be a con
2b8a0 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20  ditional */ {.  
2b8b0 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45    zMaster = SCHE
2b8c0 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
2b8d0 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
2b8e0 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
2b8f0 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
2b900 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
2b910 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
2b920 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
2b930 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
2b940 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
2b950 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
2b960 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
2b970 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
2b980 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
2b990 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
2b9a0 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  ].zName, zMaster
2b9b0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2b9c0 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
2b9d0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
2b9e0 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65  TE_NOMEM;.    }e
2b9f0 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
2ba00 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
2ba10 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
2ba20 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
2ba30 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
2ba40 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2ba50 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62       assert( !db
2ba60 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
2ba70 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
2ba80 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
2ba90 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
2baa0 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
2bab0 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
2bac0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2bad0 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e  ) rc = initData.
2bae0 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  rc;.      sqlite
2baf0 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c  3DbFree(db, zSql
2bb00 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
2bb10 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20  t.busy = 0;.    
2bb20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2bb30 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
2bb40 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
2bb50 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72  ion(db);.  if( r
2bb60 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
2bb70 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
2bb80 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
2bb90 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
2bba0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2bbb0 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64  NALYZE)./* Opcod
2bbc0 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
2bbd0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2bbe0 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
2bbf0 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
2bc00 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
2bc10 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
2bc20 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
2bc30 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
2bc40 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
2bc50 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
2bc60 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
2bc70 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
2bc80 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
2bc90 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
2bca0 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
2bcb0 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
2bcc0 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  s: {.  assert( p
2bcd0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2bce0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2bcf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e    rc = sqlite3An
2bd00 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70  alysisLoad(db, p
2bd10 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b  Op->p1);.  break
2bd20 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;  .}.#endif /* 
2bd30 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2bd40 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f  OMIT_ANALYZE) */
2bd50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2bd60 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34  pTable P1 * * P4
2bd70 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2bd80 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2bd90 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2bda0 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2bdb0 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61  scribe.** the ta
2bdc0 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ble named P4 in 
2bdd0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2bde0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2bdf0 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73  er a table.** is
2be00 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2be10 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2be20 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
2be30 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
2be40 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
2be50 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2be60 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2be70 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2be80 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2be90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2bea0 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74  Table: {.  sqlit
2beb0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2bec0 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e  eTable(db, pOp->
2bed0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2bee0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2bef0 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78  pcode: DropIndex
2bf00 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2bf10 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2bf20 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2bf30 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2bf40 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2bf50 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61  .** the index na
2bf60 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2bf70 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2bf80 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20  called after an 
2bf90 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70  index.** is drop
2bfa0 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2bfb0 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2bfc0 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f   opcode).** in o
2bfd0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
2bfe0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2bff0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2c000 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2c010 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2c020 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2c030 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a  se OP_DropIndex:
2c040 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2c050 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
2c060 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2c070 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2c080 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c090 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20   DropTrigger P1 
2c0a0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2c0b0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2c0c0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2c0d0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2c0e0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2c0f0 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65  the trigger name
2c100 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2c110 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2c120 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69  lled after a tri
2c130 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70  gger.** is dropp
2c140 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2c150 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2c160 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
2c170 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
2c180 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2c190 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2c1a0 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2c1b0 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2c1c0 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2c1d0 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
2c1e0 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
2c1f0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
2c200 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
2c210 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2c220 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
2c230 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
2c240 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
2c250 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
2c260 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
2c270 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
2c280 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
2c290 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
2c2a0 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
2c2b0 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
2c2c0 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
2c2d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
2c2e0 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
2c2f0 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
2c300 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
2c310 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
2c320 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
2c330 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
2c340 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
2c350 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
2c360 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
2c370 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
2c380 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
2c390 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
2c3a0 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
2c3b0 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
2c3c0 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
2c3d0 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
2c3e0 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
2c3f0 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
2c400 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
2c410 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2c420 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
2c430 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
2c440 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
2c450 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
2c460 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
2c470 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
2c480 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
2c490 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
2c4a0 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
2c4b0 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
2c4c0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2c4d0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
2c4e0 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
2c4f0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2c500 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
2c510 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2c520 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2c530 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
2c540 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
2c550 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
2c560 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
2c570 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
2c580 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
2c590 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
2c5a0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
2c5b0 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
2c5c0 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
2c5d0 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
2c5e0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
2c5f0 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
2c600 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
2c610 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
2c620 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
2c630 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
2c640 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
2c650 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2c660 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
2c670 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
2c680 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
2c690 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
2c6a0 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
2c6b0 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
2c6c0 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
2c6d0 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
2c6e0 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65  ining */..  asse
2c6f0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
2c700 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f   );.  nRoot = pO
2c710 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
2c720 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52   nRoot>0 );.  aR
2c730 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
2c740 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
2c750 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b  eof(int)*(nRoot+
2c760 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f  1) );.  if( aRoo
2c770 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  t==0 ) goto no_m
2c780 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
2c790 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
2c7a0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
2c7b0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e  nCursor) );.  pn
2c7c0 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Err = &aMem[pOp-
2c7d0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
2c7e0 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
2c7f0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2c800 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
2c810 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
2c820 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
2c830 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
2c840 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
2c850 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
2c860 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
2c870 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65  j] = (int)sqlite
2c880 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70  3VdbeIntValue(&p
2c890 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61  In1[j]);.  }.  a
2c8a0 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61  Root[j] = 0;.  a
2c8b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
2c8c0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2c8d0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2c8e0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2c8f0 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73  ->p5) );.  z = s
2c900 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
2c910 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
2c920 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
2c930 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20  aRoot, nRoot,.  
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2c960 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20  int)pnErr->u.i, 
2c970 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
2c980 33 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f  3DbFree(db, aRoo
2c990 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69  t);.  pnErr->u.i
2c9a0 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69   -= nErr;.  sqli
2c9b0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2c9c0 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
2c9d0 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
2c9e0 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
2c9f0 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
2ca00 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
2ca10 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
2ca20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2ca30 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31  tStr(pIn1, z, -1
2ca40 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73  , SQLITE_UTF8, s
2ca50 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
2ca60 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  }.  UPDATE_MAX_B
2ca70 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
2ca80 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
2ca90 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c  geEncoding(pIn1,
2caa0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72   encoding);.  br
2cab0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
2cac0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
2cad0 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
2cae0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2caf0 65 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20  etAdd P1 P2 * * 
2cb00 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
2cb10 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d  rowset(P1)=r[P2]
2cb20 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68  .**.** Insert th
2cb30 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
2cb40 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72  held by register
2cb50 20 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65   P2 into a boole
2cb60 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64  an index.** held
2cb70 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
2cb80 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74  .**.** An assert
2cb90 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20  ion fails if P2 
2cba0 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
2cbb0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  r..*/.case OP_Ro
2cbc0 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20  wSetAdd: {      
2cbd0 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a   /* in1, in2 */.
2cbe0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2cbf0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
2cc00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2cc10 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
2cc20 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
2cc30 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  nt)!=0 );.  if( 
2cc40 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2cc50 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
2cc60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2cc70 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
2cc80 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
2cc90 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2cca0 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
2ccb0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73   no_mem;.  }.  s
2ccc0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
2ccd0 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
2cce0 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a  et, pIn2->u.i);.
2ccf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2cd00 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61  pcode: RowSetRea
2cd10 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
2cd20 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
2cd30 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a  3]=rowset(P1).**
2cd40 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20  .** Extract the 
2cd50 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66  smallest value f
2cd60 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  rom boolean inde
2cd70 78 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61  x P1 and put tha
2cd80 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20  t value into.** 
2cd90 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72  register P3.  Or
2cda0 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  , if boolean ind
2cdb0 65 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c  ex P1 is initial
2cdc0 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20  ly empty, leave 
2cdd0 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20  P3.** unchanged 
2cde0 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  and jump to inst
2cdf0 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63  ruction P2..*/.c
2ce00 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61  ase OP_RowSetRea
2ce10 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  d: {       /* ju
2ce20 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f  mp, in1, out3 */
2ce30 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70  .  i64 val;..  p
2ce40 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2ce50 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
2ce60 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2ce70 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c  owSet)==0 .   ||
2ce80 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65   sqlite3RowSetNe
2ce90 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  xt(pIn1->u.pRowS
2cea0 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29  et, &val)==0.  )
2ceb0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f  {.    /* The boo
2cec0 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d  lean index is em
2ced0 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  pty */.    sqlit
2cee0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2cef0 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65  (pIn1);.    Vdbe
2cf00 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
2cf10 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
2cf20 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
2cf30 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  for_interrupt;. 
2cf40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41   }else{.    /* A
2cf50 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65   value was pulle
2cf60 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78  d from the index
2cf70 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e   */.    VdbeBran
2cf80 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20  chTaken(0,2);.  
2cf90 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2cfa0 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
2cfb0 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20  Op->p3], val);. 
2cfc0 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
2cfd0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
2cfe0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2cff0 53 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33  SetTest P1 P2 P3
2d000 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
2d010 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77   if r[P3] in row
2d020 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a  set(P1) goto P2.
2d030 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2d040 33 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  3 is assumed to 
2d050 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e  hold a 64-bit in
2d060 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20  teger value. If 
2d070 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63  register P1.** c
2d080 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74  ontains a RowSet
2d090 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74   object and that
2d0a0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63   RowSet object c
2d0b0 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76  ontains.** the v
2d0c0 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c  alue held in P3,
2d0d0 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65   jump to registe
2d0e0 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  r P2. Otherwise,
2d0f0 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69   insert the.** i
2d100 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74  nteger in P3 int
2d110 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64  o the RowSet and
2d120 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20   continue on to 
2d130 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f  the.** next opco
2d140 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f  de..**.** The Ro
2d150 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f  wSet object is o
2d160 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65  ptimized for the
2d170 20 63 61 73 65 20 77 68 65 72 65 20 73 75 63 63   case where succ
2d180 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f  essive sets.** o
2d190 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72  f integers, wher
2d1a0 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  e each set conta
2d1b0 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
2d1c0 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f  s. Each set.** o
2d1d0 66 20 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e  f values is iden
2d1e0 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
2d1f0 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
2d200 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
2d210 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
2d220 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d  he final set P4=
2d230 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20  -1.  P4 must be 
2d240 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20  either -1 or.** 
2d250 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46  non-negative.  F
2d260 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  or non-negative 
2d270 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c  values of P4 onl
2d280 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a  y the lower 4.**
2d290 20 62 69 74 73 20 61 72 65 20 73 69 67 6e 69 66   bits are signif
2d2a0 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  icant..**.** Thi
2d2b0 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a  s allows optimiz
2d2c0 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e  ations: (a) when
2d2d0 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20   P4==0 there is 
2d2e0 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a  no need to test.
2d2f0 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62  ** the rowset ob
2d300 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20  ject for P3, as 
2d310 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
2d320 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20   not to contain 
2d330 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20  it,.** (b) when 
2d340 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20  P4==-1 there is 
2d350 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72  no need to inser
2d360 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20  t the value, as 
2d370 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72  it will.** never
2d380 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20   be tested for, 
2d390 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76  and (c) when a v
2d3a0 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72  alue that is par
2d3b0 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a  t of set X is.**
2d3c0 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65   inserted, there
2d3d0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73   is no need to s
2d3e0 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20  earch to see if 
2d3f0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77  the same value w
2d400 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
2d410 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2d420 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79  t of set X (only
2d430 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69   if it was previ
2d440 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65  ously.** inserte
2d450 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d  d as part of som
2d460 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f  e other set)..*/
2d470 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54  .case OP_RowSetT
2d480 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
2d490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
2d4a0 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
2d4b0 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e    int iSet;.  in
2d4c0 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e  t exists;..  pIn
2d4d0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2d4e0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
2d4f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
2d500 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  Set = pOp->p4.i;
2d510 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
2d520 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2d530 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65  ;..  /* If there
2d540 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68   is anything oth
2d550 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74  er than a rowset
2d560 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72   object in memor
2d570 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20  y cell P1,.  ** 
2d580 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e  delete it now an
2d590 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20  d initialize P1 
2d5a0 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f  with an empty ro
2d5b0 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20  wset.  */.  if( 
2d5c0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2d5d0 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b  EM_RowSet)==0 ){
2d5e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2d5f0 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
2d600 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  1);.    if( (pIn
2d610 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2d620 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f  owSet)==0 ) goto
2d630 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20   no_mem;.  }..  
2d640 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2d650 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
2d660 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
2d670 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
2d680 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
2d690 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
2d6a0 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70  ite3RowSetTest(p
2d6b0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2d6c0 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  iSet, pIn3->u.i)
2d6d0 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
2d6e0 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c  Taken(exists!=0,
2d6f0 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73  2);.    if( exis
2d700 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
2d710 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20  o_p2;.  }.  if( 
2d720 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
2d730 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
2d740 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
2d750 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2d760 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d770 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2d780 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
2d790 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
2d7a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2d7b0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2d7c0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2d7d0 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28  m passed as P4 (
2d7e0 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52  type P4_SUBPROGR
2d7f0 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63  AM). .**.** P1 c
2d800 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2d810 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ess of the memor
2d820 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
2d830 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d  ains the first m
2d840 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69  emory .** cell i
2d850 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61  n an array of va
2d860 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67  lues used as arg
2d870 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75  uments to the su
2d880 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a  b-program. P2 .*
2d890 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  * contains the a
2d8a0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
2d8b0 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f  o if the sub-pro
2d8c0 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49  gram throws an I
2d8d0 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74  GNORE .** except
2d8e0 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41  ion using the RA
2d8f0 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  ISE() function. 
2d900 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  Register P3 cont
2d910 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2d920 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79   .** of a memory
2d930 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74   cell in this (t
2d940 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68  he parent) VM th
2d950 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c  at is used to al
2d960 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d  locate the .** m
2d970 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62  emory required b
2d980 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61  y the sub-vdbe a
2d990 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  t runtime..**.**
2d9a0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2d9b0 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61   to the VM conta
2d9c0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
2d9d0 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a  r program..**.**
2d9e0 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
2d9f0 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ro, then recursi
2da00 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63  ve program invoc
2da10 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ation is enabled
2da20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
2da30 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
2da40 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
2da50 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
2da60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2da70 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
2da80 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
2da90 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
2daa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2dab0 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
2dac0 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
2dad0 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
2dae0 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
2daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2db00 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
2db10 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
2db20 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
2db30 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2db40 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
2db50 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
2db60 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
2db70 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
2db80 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
2db90 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
2dba0 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
2dbb0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
2dbc0 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
2dbd0 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
2dbe0 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
2dbf0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
2dc00 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
2dc10 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
2dc20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
2dc30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
2dc40 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
2dc50 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
2dc60 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
2dc70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
2dc80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2dc90 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
2dca0 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
2dcb0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
2dcc0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
2dcd0 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
2dce0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
2dcf0 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
2dd00 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
2dd10 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
2dd20 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
2dd30 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
2dd40 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
2dd50 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
2dd60 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
2dd70 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
2dd80 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
2dd90 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
2dda0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
2ddb0 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
2ddc0 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
2ddd0 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
2dde0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2ddf0 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
2de00 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
2de10 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
2de20 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
2de30 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
2de40 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
2de50 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
2de60 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
2de70 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
2de80 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
2de90 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
2dea0 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
2deb0 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
2dec0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
2ded0 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
2dee0 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
2def0 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
2df00 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
2df10 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
2df20 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
2df30 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
2df40 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
2df50 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
2df60 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
2df70 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2df80 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
2df90 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
2dfa0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
2dfb0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
2dfc0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
2dfd0 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
2dfe0 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
2dff0 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
2e000 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
2e010 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
2e020 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2e030 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
2e040 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
2e050 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
2e060 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
2e070 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62  cursion");.    b
2e080 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
2e090 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
2e0a0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
2e0b0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2e0c0 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
2e0d0 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
2e0e0 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
2e0f0 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
2e100 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
2e110 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
2e120 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
2e130 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
2e140 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
2e150 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
2e160 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
2e170 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
2e180 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
2e190 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
2e1a0 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
2e1b0 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
2e1c0 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
2e1d0 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
2e1e0 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
2e1f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
2e200 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
2e210 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
2e220 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
2e230 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
2e240 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
2e250 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
2e260 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
2e270 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
2e280 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
2e290 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
2e2a0 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
2e2b0 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
2e2c0 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
2e2d0 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
2e2e0 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
2e2f0 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
2e300 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
2e310 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2e320 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
2e330 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
2e340 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
2e350 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
2e360 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
2e370 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
2e380 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
2e390 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20  beCursor *).    
2e3a0 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
2e3b0 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69  gram->nOnce * si
2e3c0 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46  zeof(u8);.    pF
2e3d0 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62  rame = sqlite3Db
2e3e0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e  MallocZero(db, n
2e3f0 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Byte);.    if( !
2e400 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
2e410 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
2e420 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
2e430 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74  beMemRelease(pRt
2e440 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67  );.    pRt->flag
2e450 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20  s = MEM_Frame;. 
2e460 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65     pRt->u.pFrame
2e470 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20   = pFrame;..    
2e480 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20  pFrame->v = p;. 
2e490 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
2e4a0 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20  dMem = nMem;.   
2e4b0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43   pFrame->nChildC
2e4c0 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  sr = pProgram->n
2e4d0 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
2e4e0 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
2e4f0 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61  - aOp);.    pFra
2e500 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
2e510 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2e520 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
2e530 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
2e540 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
2e550 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
2e560 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
2e570 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
2e580 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
2e590 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
2e5a0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2e5b0 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
2e5c0 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72  ->token;.    pFr
2e5d0 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d  ame->aOnceFlag =
2e5e0 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20   p->aOnceFlag;. 
2e5f0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65     pFrame->nOnce
2e600 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46  Flag = p->nOnceF
2e610 6c 61 67 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  lag;.#ifdef SQLI
2e620 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2e630 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46  CANSTATUS.    pF
2e640 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70  rame->anExec = p
2e650 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66  ->anExec;.#endif
2e660 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
2e670 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2e680 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
2e690 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
2e6a0 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
2e6b0 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
2e6c0 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
2e6d0 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
2e6e0 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
2e6f0 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
2e700 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
2e710 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
2e720 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
2e730 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2e740 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
2e750 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
2e760 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29  ame->nChildMem )
2e770 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2e780 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2e790 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2e7a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
2e7b0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d  int)(pOp - aOp)=
2e7c0 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
2e7d0 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
2e7e0 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
2e7f0 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
2e800 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
2e810 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
2e820 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  d;.  pFrame->nCh
2e830 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
2e840 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62  e;.  pFrame->nDb
2e850 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e  Change = p->db->
2e860 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43  nChange;.  p->nC
2e870 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e  hange = 0;.  p->
2e880 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2e890 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65  .  p->aMem = aMe
2e8a0 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  m = &VdbeFrameMe
2e8b0 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20  m(pFrame)[-1];. 
2e8c0 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
2e8d0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
2e8e0 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
2e8f0 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
2e900 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
2e910 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
2e920 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31  )&aMem[p->nMem+1
2e930 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f  ];.  p->aOp = aO
2e940 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f  p = pProgram->aO
2e950 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50  p;.  p->nOp = pP
2e960 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70  rogram->nOp;.  p
2e970 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75  ->aOnceFlag = (u
2e980 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d  8 *)&p->apCsr[p-
2e990 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e  >nCursor];.  p->
2e9a0 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f  nOnceFlag = pPro
2e9b0 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66  gram->nOnce;.#if
2e9c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2e9d0 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
2e9e0 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20  S.  p->anExec = 
2e9f0 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20  0;.#endif.  pOp 
2ea00 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 6d 65  = &aOp[-1];.  me
2ea10 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61  mset(p->aOnceFla
2ea20 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c  g, 0, p->nOnceFl
2ea30 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  ag);..  break;.}
2ea40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
2ea50 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
2ea60 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2ea70 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
2ea80 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
2ea90 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
2eaa0 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
2eab0 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
2eac0 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
2ead0 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
2eae0 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
2eaf0 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
2eb00 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
2eb10 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
2eb20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
2eb30 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
2eb40 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
2eb50 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
2eb60 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
2eb70 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
2eb80 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
2eb90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
2eba0 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
2ebb0 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
2ebc0 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
2ebd0 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
2ebe0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2ebf0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
2ec00 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
2ec10 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
2ec20 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
2ec30 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
2ec40 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2ec50 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
2ec60 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2ec70 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2ec80 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
2ec90 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2eca0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2ecb0 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
2ecc0 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70  rame;.  pIn = &p
2ecd0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2ece0 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f  >p1 + pFrame->aO
2ecf0 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31  p[pFrame->pc].p1
2ed00 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56  ];   .  sqlite3V
2ed10 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
2ed20 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d  y(pOut, pIn, MEM
2ed30 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b  _Ephem);.  break
2ed40 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23  ;.}..#endif /* #
2ed50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ed60 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23  IT_TRIGGER */..#
2ed70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ed80 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f  IT_FOREIGN_KEY./
2ed90 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e  * Opcode: FkCoun
2eda0 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ter P1 P2 * * *.
2edb0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63  ** Synopsis: fkc
2edc0 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a  tr[P1]+=P2.**.**
2edd0 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
2ede0 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2edf0 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
2ee00 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
2ee10 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
2ee20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2ee30 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2ee40 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
2ee50 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
2ee60 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
2ee70 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2ee80 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
2ee90 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
2eea0 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
2eeb0 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
2eec0 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
2eed0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2eee0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
2eef0 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
2ef00 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d  ter: {.  if( db-
2ef10 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2ef20 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20  DeferFKs ){.    
2ef30 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2ef40 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
2ef50 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
2ef60 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
2ef70 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
2ef80 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2ef90 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
2efa0 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
2efb0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2efc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
2efd0 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
2efe0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2eff0 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30   if fkctr[P1]==0
2f000 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
2f010 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73  his opcode tests
2f020 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65   if a foreign ke
2f030 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  y constraint-cou
2f040 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
2f050 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f  y zero..** If so
2f060 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
2f070 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
2f080 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2f090 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a  h to the next .*
2f0a0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
2f0b0 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
2f0c0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
2f0d0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
2f0e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
2f0f0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2f100 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68  r.** is zero (th
2f110 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74  e one that count
2f120 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
2f130 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
2f140 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a  ). If P1 is.** z
2f150 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73  ero, the jump is
2f160 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74   taken if the st
2f170 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69  atement constrai
2f180 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65  nt-counter is ze
2f190 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65  ro.** (immediate
2f1a0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2f1b0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2f1c0 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ns)..*/.case OP_
2f1d0 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  FkIfZero: {     
2f1e0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2f1f0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
2f200 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2f210 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65  ken(db->nDeferre
2f220 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
2f230 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2f240 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
2f250 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
2f260 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
2f270 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2f280 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2f290 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
2f2a0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2f2b0 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
2f2c0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
2f2d0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
2f2e0 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
2f2f0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2f300 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2f310 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
2f320 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2f330 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
2f340 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
2f350 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2f360 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e  IGN_KEY */..#ifn
2f370 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f380 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a  AUTOINCREMENT./*
2f390 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20   Opcode: MemMax 
2f3a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2f3b0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d  ynopsis: r[P1]=m
2f3c0 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a  ax(r[P1],r[P2]).
2f3d0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65  **.** P1 is a re
2f3e0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
2f3f0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
2f400 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72   VM (the root fr
2f410 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72  ame is.** differ
2f420 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ent from the cur
2f430 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68  rent frame if th
2f440 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
2f450 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
2f460 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62  .** within a sub
2f470 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74  -program). Set t
2f480 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2f490 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
2f4a0 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74  aximum of .** it
2f4b0 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
2f4c0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
2f4d0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2f4e0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
2f4f0 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
2f500 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
2f510 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
2f520 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
2f530 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2f540 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
2f550 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
2f560 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2f570 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  e;.  if( p->pFra
2f580 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46  me ){.    for(pF
2f590 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
2f5a0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
2f5b0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
2f5c0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49  pParent);.    pI
2f5d0 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  n1 = &pFrame->aM
2f5e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2f5f0 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d  else{.    pIn1 =
2f600 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2f610 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d  .  }.  assert( m
2f620 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
2f630 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2f640 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
2f650 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
2f660 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2f670 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2f680 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
2f690 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
2f6a0 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20  pIn2->u.i){.    
2f6b0 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32  pIn1->u.i = pIn2
2f6c0 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65  ->u.i;.  }.  bre
2f6d0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2f6e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2f6f0 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a  INCREMENT */../*
2f700 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50   Opcode: IfPos P
2f710 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2f720 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
2f730 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d  ]>0 then r[P1]-=
2f740 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3, goto P2.**.*
2f750 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
2f760 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2f770 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65  teger..** If the
2f780 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2f790 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
2f7a0 65 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20  eater, subtract 
2f7b0 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76  P3 from the.** v
2f7c0 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a  alue in P1 and j
2f7d0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
2f7e0 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20   If the initial 
2f7f0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2f800 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
2f810 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  n 1, then the.**
2f820 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e   value is unchan
2f830 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20  ged and control 
2f840 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74  passes through t
2f850 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2f860 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2f870 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
2f880 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2f890 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2f8a0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2f8b0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2f8c0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2f8d0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
2f8e0 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
2f8f0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
2f900 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  >0 ){.    pIn1->
2f910 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a  u.i -= pOp->p3;.
2f920 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
2f930 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
2f940 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2f950 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50  OffsetLimit P1 P
2f960 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2f970 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
2f980 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31   then r[P2]=r[P1
2f990 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65  ]+max(0,r[P3]) e
2f9a0 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a  lse r[P2]=(-1).*
2f9b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2f9c0 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d   performs a comm
2f9d0 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74  only used comput
2f9e0 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ation associated
2f9f0 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61   with.** LIMIT a
2fa00 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73  nd OFFSET proces
2fa10 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20  s.  r[P1] holds 
2fa20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65  the limit counte
2fa30 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c  r.  r[P3].** hol
2fa40 64 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f  ds the offset co
2fa50 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f  unter.  The opco
2fa60 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  de computes the 
2fa70 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a  combined value.*
2fa80 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61  * of the LIMIT a
2fa90 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74  nd OFFSET and st
2faa0 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20  ores that value 
2fab0 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72  in r[P2].  The r
2fac0 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f  [P2].** value co
2fad0 6d 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f  mputed is the to
2fae0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
2faf0 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65  ws that will nee
2fb00 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74  d to be.** visit
2fb10 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ed in order to c
2fb20 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72  omplete the quer
2fb30 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33  y..**.** If r[P3
2fb40 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67  ] is zero or neg
2fb50 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e  ative, that mean
2fb60 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46  s there is no OF
2fb70 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32  FSET.** and r[P2
2fb80 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74  ] is set to be t
2fb90 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2fba0 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a  LIMIT, r[P1]..**
2fbb0 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20  .** if r[P1] is 
2fbc0 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65  zero or negative
2fbd0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
2fbe0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a  re is no LIMIT.*
2fbf0 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
2fc00 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a  et to -1. .**.**
2fc10 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32   Otherwise, r[P2
2fc20 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  ] is set to the 
2fc30 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64  sum of r[P1] and
2fc40 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20   r[P3]..*/.case 
2fc50 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20  OP_OffsetLimit: 
2fc60 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74  {    /* in1, out
2fc70 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 31  2, in3 */.  pIn1
2fc80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2fc90 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
2fca0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f  m[pOp->p3];.  pO
2fcb0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2fcc0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
2fcd0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2fce0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
2fcf0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
2fd00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
2fd10 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
2fd20 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30 20 3f 20   pIn1->u.i<=0 ? 
2fd30 2d 31 20 3a 20 70 49 6e 31 2d 3e 75 2e 69 2b 28  -1 : pIn1->u.i+(
2fd40 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33  pIn3->u.i>0?pIn3
2fd50 2d 3e 75 2e 69 3a 30 29 3b 0a 20 20 62 72 65 61  ->u.i:0);.  brea
2fd60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2fd70 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32   IfNotZero P1 P2
2fd80 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2fd90 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
2fda0 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
2fdb0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
2fdc0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
2fdd0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2fde0 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  er.  If the cont
2fdf0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
2fe00 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c  P1 is.** initial
2fe10 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e  ly nonzero, then
2fe20 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
2fe30 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
2fe40 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 0a 2a  egister P1 and.*
2fe50 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
2fe60 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
2fe70 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c   initially zero,
2fe80 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e   leave it unchan
2fe90 67 65 64 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20  ged.** and fall 
2fea0 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
2feb0 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
2fec0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2fed0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2fee0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2fef0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2ff00 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2ff10 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2ff20 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
2ff30 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
2ff40 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e  >u.i ){.     pIn
2ff50 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70  1->u.i -= pOp->p
2ff60 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  3;.     goto jum
2ff70 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
2ff80 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2ff90 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f  de: DecrJumpZero
2ffa0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2ffb0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d  Synopsis: if (--
2ffc0 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50  r[P1])==0 goto P
2ffd0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2ffe0 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e   P1 must hold an
2fff0 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65   integer.  Decre
30000 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
30010 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  n register P1.**
30020 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
30030 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
30040 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72  e is exactly zer
30050 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  o..*/.case OP_De
30060 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20  crJumpZero: {   
30070 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
30080 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
30090 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
300a0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
300b0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
300c0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
300d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
300e0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
300f0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
30100 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
30110 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
30120 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  .../* Opcode: Ju
30130 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31 20 50 32  mpZeroIncr P1 P2
30140 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
30150 69 73 3a 20 69 66 20 28 72 5b 50 31 5d 2b 2b 29  is: if (r[P1]++)
30160 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ==0 ) goto P2.**
30170 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
30180 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
30190 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
301a0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
301b0 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 7a 65 72  initially.** zer
301c0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
301d0 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e 74 20 72  P2.  Increment r
301e0 65 67 69 73 74 65 72 20 50 31 20 72 65 67 61 72  egister P1 regar
301f0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
30200 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 6a   or.** not the j
30210 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2f  ump is taken..*/
30220 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 5a 65 72  .case OP_JumpZer
30230 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20 20 20 20  oIncr: {        
30240 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
30250 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
30260 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
30270 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
30280 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
30290 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
302a0 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20  ->u.i==0, 2);.  
302b0 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e 69 2b 2b  if( (pIn1->u.i++
302c0 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  )==0 ) goto jump
302d0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
302e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
302f0 67 67 53 74 65 70 30 20 2a 20 50 32 20 50 33 20  ggStep0 * P2 P3 
30300 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
30310 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
30320 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
30330 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
30340 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
30350 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
30360 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
30370 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
30380 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
30390 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63  nter to the Func
303a0 44 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  Def.** structure
303b0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
303c0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52  the function.  R
303d0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
303e0 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72  e.** accumulator
303f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
30400 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
30410 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
30420 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
30430 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a  uccessors..*/./*
30440 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
30450 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
30460 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
30470 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
30480 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
30490 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
304a0 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
304b0 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
304c0 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
304d0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
304e0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
304f0 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
30500 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68  ext.** object th
30510 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 72 75  at is used to ru
30520 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  n the function. 
30530 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   Register P3 is.
30540 2a 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d 75  ** as the accumu
30550 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
30560 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
30570 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
30580 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
30590 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
305a0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
305b0 65 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63  e is initially c
305c0 6f 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74  oded as OP_AggSt
305d0 65 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65  ep0.  On first e
305e0 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68  valuation,.** th
305f0 65 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64  e FuncDef stored
30600 20 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72   in P4 is conver
30610 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
30620 74 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a  te3_context and.
30630 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73  ** the opcode is
30640 20 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68   changed.  In th
30650 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74  is way, the init
30660 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68  ialization of th
30670 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e.** sqlite3_con
30680 74 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e  text only happen
30690 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20  s once, instead 
306a0 6f 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20  of on each call 
306b0 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66  to the.** step f
306c0 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  unction..*/.case
306d0 20 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a   OP_AggStep0: {.
306e0 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74    int n;.  sqlit
306f0 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
30700 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
30710 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
30720 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f  CDEF );.  n = pO
30730 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
30740 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
30750 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
30760 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
30770 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
30780 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
30790 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
307a0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
307b0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
307c0 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
307d0 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
307e0 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d  p2+n );.  pCtx =
307f0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
30800 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a  Raw(db, sizeof(*
30810 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69  pCtx) + (n-1)*si
30820 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
30830 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74  ue*));.  if( pCt
30840 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
30850 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d  em;.  pCtx->pMem
30860 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46   = 0;.  pCtx->pF
30870 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
30880 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70  unc;.  pCtx->iOp
30890 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
308a0 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64  Op);.  pCtx->pVd
308b0 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e  be = p;.  pCtx->
308c0 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d  argc = n;.  pOp-
308d0 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e  >p4type = P4_FUN
308e0 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e  CCTX;.  pOp->p4.
308f0 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70  pCtx = pCtx;.  p
30900 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
30910 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46 61  AggStep;.  /* Fa
30920 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
30930 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a  OP_AggStep */.}.
30940 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
30950 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71   {.  int i;.  sq
30960 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
30970 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  Ctx;.  Mem *pMem
30980 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61 73  ;.  Mem t;..  as
30990 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
309a0 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
309b0 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
309c0 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d  4.pCtx;.  pMem =
309d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
309e0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
309f0 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
30a00 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
30a10 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
30a20 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
30a30 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
30a40 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
30a50 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
30a60 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
30a70 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
30a80 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
30a90 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
30aa0 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
30ab0 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
30ac0 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
30ad0 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
30ae0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
30af0 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
30b00 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d  /.  if( pCtx->pM
30b10 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20  em != pMem ){.  
30b20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70    pCtx->pMem = p
30b30 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Mem;.    for(i=p
30b40 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
30b50 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
30b60 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
30b70 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23  p->p2+i];.  }..#
30b80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
30b90 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  UG.  for(i=0; i<
30ba0 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29  pCtx->argc; i++)
30bb0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
30bc0 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61  mIsValid(pCtx->a
30bd0 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52  rgv[i]) );.    R
30be0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
30bf0 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61  p->p2+i, pCtx->a
30c00 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e  rgv[i]);.  }.#en
30c10 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  dif..  pMem->n++
30c20 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
30c30 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d  emInit(&t, db, M
30c40 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
30c50 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 70  ->pOut = &t;.  p
30c60 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
30c70 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73 6b   = 0;.  pCtx->sk
30c80 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 70  ipFlag = 0;.  (p
30c90 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75  Ctx->pFunc->xSFu
30ca0 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  nc)(pCtx,pCtx->a
30cb0 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
30cc0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
30cd0 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20  -23230 */.  if( 
30ce0 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
30cf0 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74  x ){.    if( pCt
30d00 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  x->isError ){.  
30d10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
30d20 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
30d30 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
30d40 28 26 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20  (&t));.      rc 
30d50 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b  = pCtx->isError;
30d60 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
30d70 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
30d80 28 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (&t);.  }else{. 
30d90 20 20 20 61 73 73 65 72 74 28 20 74 2e 66 6c 61     assert( t.fla
30da0 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  gs==MEM_Null );.
30db0 20 20 7d 0a 20 20 69 66 28 20 70 43 74 78 2d 3e    }.  if( pCtx->
30dc0 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20  skipFlag ){.    
30dd0 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
30de0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
30df0 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f  eq );.    i = pO
30e00 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66  p[-1].p1;.    if
30e10 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62  ( i ) sqlite3Vdb
30e20 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
30e30 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20  em[i], 1);.  }. 
30e40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
30e50 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
30e60 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
30e70 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
30e80 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20  [P1] N=P2.**.** 
30e90 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
30ea0 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
30eb0 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
30ec0 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
30ed0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
30ee0 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
30ef0 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
30f00 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
30f10 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
30f20 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
30f30 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
30f40 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
30f50 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
30f60 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
30f70 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
30f80 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
30f90 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
30fa0 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
30fb0 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
30fc0 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
30fd0 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
30fe0 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
30ff0 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
31000 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
31010 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
31020 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
31030 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
31040 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
31050 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
31060 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
31070 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
31080 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
31090 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
310a0 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
310b0 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
310c0 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
310d0 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d  nCursor) );.  pM
310e0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
310f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
31100 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
31110 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
31120 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
31130 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
31140 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
31150 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
31160 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
31170 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
31180 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
31190 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
311a0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
311b0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
311c0 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
311d0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
311e0 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
311f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
31200 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
31210 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
31220 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
31230 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
31240 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
31250 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
31260 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
31270 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
31280 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
31290 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
312a0 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
312b0 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
312c0 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
312d0 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
312e0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
312f0 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a  ASSIVE, FULL,.**
31300 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55   RESTART, or TRU
31310 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20  NCATE.  Write 1 
31320 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
31330 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
31340 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
31350 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
31360 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
31370 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
31380 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
31390 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
313a0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
313b0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
313c0 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
313d0 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
313e0 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
313f0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
31400 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
31410 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
31420 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
31430 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
31440 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
31450 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
31460 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
31470 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
31480 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
31490 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314b0 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
314c0 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
314d0 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
314e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
314f0 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
31500 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
31510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
31520 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
31530 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
31540 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
31550 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
31560 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
31570 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
31580 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
31590 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
315a0 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
315b0 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
315c0 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
315d0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
315e0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
315f0 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20  OINT_RESTART.   
31600 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
31610 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
31620 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a  T_TRUNCATE.  );.
31630 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
31640 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
31650 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
31660 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
31670 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  ]);.  if( rc==SQ
31680 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
31690 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
316a0 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
316b0 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
316c0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
316d0 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
316e0 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
316f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
31700 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
31710 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
31720 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
31730 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
31740 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
31750 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
31760 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
31770 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
31780 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
31790 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
317a0 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
317b0 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
317c0 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
317d0 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
317e0 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
317f0 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
31800 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
31810 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
31820 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
31830 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
31840 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
31850 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
31860 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
31870 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
31880 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
31890 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
318a0 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
318b0 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
318c0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
318d0 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
318e0 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
318f0 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
31900 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
31910 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
31920 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a  {    /* out2 */.
31930 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31950 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
31960 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
31970 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
31980 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
31990 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
319a0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
319b0 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
319c0 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
319d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
319e0 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
319f0 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a10 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
31a20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
31a30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31a40 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
31a50 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
31a60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
31a70 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
31a80 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
31a90 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20  .#endif..  pOut 
31aa0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
31ab0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77  (p, pOp);.  eNew
31ac0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
31ad0 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
31ae0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
31af0 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
31b00 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
31b10 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
31b20 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
31b30 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
31b40 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
31b50 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
31b60 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
31b70 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
31b80 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
31b90 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
31ba0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
31bb0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
31bc0 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
31bd0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
31be0 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20  ODE_QUERY.  );. 
31bf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
31c00 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
31c10 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
31c20 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
31c30 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64  =0 );..  pBt = d
31c40 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
31c50 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20  pBt;.  pPager = 
31c60 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
31c70 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d  r(pBt);.  eOld =
31c80 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
31c90 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
31ca0 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d  er);.  if( eNew=
31cb0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
31cc0 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20  DE_QUERY ) eNew 
31cd0 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73  = eOld;.  if( !s
31ce0 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43  qlite3PagerOkToC
31cf0 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65  hangeJournalMode
31d00 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20  (pPager) ) eNew 
31d10 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66  = eOld;..#ifndef
31d20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
31d30 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73  .  zFilename = s
31d40 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e  qlite3PagerFilen
31d50 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a  ame(pPager, 1);.
31d60 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
31d70 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
31d80 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
31d90 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
31da0 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
31db0 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
31dc0 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
31dd0 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
31de0 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
31df0 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
31e00 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
31e10 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
31e20 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
31e30 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
31e40 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
31e50 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
31e60 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
31e70 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
31e80 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
31e90 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
31ea0 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
31eb0 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
31ec0 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
31ed0 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
31ee0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
31ef0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
31f00 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
31f10 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
31f20 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
31f30 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20  db->nVdbeRead>1 
31f40 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
31f50 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
31f60 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
31f70 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20  or(p,.          
31f80 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
31f90 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
31fa0 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
31fb0 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
31fc0 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
31fd0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
31fe0 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
31ff0 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
32000 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c    break;.    }el
32010 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
32020 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
32030 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
32040 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
32050 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
32060 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
32070 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
32080 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
32090 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
320a0 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
320b0 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
320c0 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
320d0 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
320e0 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
320f0 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
32100 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
32110 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
32120 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
32130 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
32140 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
32150 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
32160 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
32170 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20  eWal(pPager);.  
32180 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
32190 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
321a0 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
321b0 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
321c0 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
321d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
321e0 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
321f0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
32200 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
32210 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
32220 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
32230 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
32240 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
32250 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
32260 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
32270 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
32280 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
32290 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
322a0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
322b0 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
322c0 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
322d0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
322e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
322f0 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
32300 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
32310 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
32320 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
32330 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
32340 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
32350 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
32360 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
32370 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
32380 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
32390 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
323a0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
323b0 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
323c0 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
323d0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
323e0 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
323f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
32400 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
32410 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32420 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
32430 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20  c ){.    eNew = 
32440 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77  eOld;.  }.  eNew
32450 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53   = sqlite3PagerS
32460 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
32470 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20  ager, eNew);..  
32480 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
32490 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
324a0 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
324b0 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73  t->z = (char *)s
324c0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
324d0 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70  ename(eNew);.  p
324e0 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33  Out->n = sqlite3
324f0 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a  Strlen30(pOut->z
32500 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
32510 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20   SQLITE_UTF8;.  
32520 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
32530 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
32540 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
32550 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a  ak;.};.#endif /*
32560 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
32570 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  GMA */..#if !def
32580 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
32590 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
325a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
325b0 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
325c0 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a  de: Vacuum * * *
325d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
325e0 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
325f0 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63  abase.  This opc
32600 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f  ode will cause o
32610 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20  ther virtual.** 
32620 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63  machines to be c
32630 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20  reated and run. 
32640 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63   It may not be c
32650 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
32660 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69  n.** a transacti
32670 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
32680 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
32690 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
326a0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
326b0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
326c0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20  >zErrMsg, db);. 
326d0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
326e0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
326f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
32700 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65  ACUUM)./* Opcode
32710 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20  : IncrVacuum P1 
32720 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
32730 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20  erform a single 
32740 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72  step of the incr
32750 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70  emental vacuum p
32760 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74  rocedure on.** t
32770 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20  he P1 database. 
32780 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61  If the vacuum ha
32790 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70  s finished, jump
327a0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a   to instruction.
327b0 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  ** P2. Otherwise
327c0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
327d0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
327e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
327f0 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b  OP_IncrVacuum: {
32800 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
32810 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
32820 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
32830 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
32840 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
32850 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
32860 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
32870 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
32880 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
32890 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20  y==0 );.  pBt = 
328a0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
328b0 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .pBt;.  rc = sql
328c0 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63  ite3BtreeIncrVac
328d0 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65  uum(pBt);.  Vdbe
328e0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d  BranchTaken(rc==
328f0 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a  SQLITE_DONE,2);.
32900 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
32910 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 72 63 20  _DONE ){.    rc 
32920 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
32930 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
32940 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
32950 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
32960 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
32970 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
32980 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
32990 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69  atements to expi
329a0 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70  re.  When an exp
329b0 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
329c0 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73  * is executed us
329d0 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ing sqlite3_step
329e0 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65  () it will eithe
329f0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  r automatically.
32a00 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73  ** reprepare its
32a10 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f  elf (if it was o
32a20 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65  riginally create
32a30 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
32a40 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a  prepare_v2()).**
32a50 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c   or it will fail
32a60 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48   with SQLITE_SCH
32a70 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  EMA..** .** If P
32a80 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
32a90 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
32aa0 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
32ab0 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
32ac0 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
32ad0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
32ae0 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
32af0 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f  t is expired..*/
32b00 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
32b10 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70   {.  if( !pOp->p
32b20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
32b30 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
32b40 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
32b50 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78  }else{.    p->ex
32b60 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
32b70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
32b80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
32b90 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f  HARED_CACHE./* O
32ba0 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b  pcode: TableLock
32bb0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
32bc0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d  * Synopsis: iDb=
32bd0 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65  P1 root=P2 write
32be0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  =P3.**.** Obtain
32bf0 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
32c00 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
32c10 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
32c20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
32c30 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
32c40 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
32c50 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
32c60 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
32c70 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
32c80 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
32c90 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
32ca0 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
32cb0 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
32cc0 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
32cd0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
32ce0 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
32cf0 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
32d00 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
32d10 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
32d20 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
32d30 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
32d40 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
32d50 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
32d60 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
32d70 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
32d80 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
32d90 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
32da0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
32db0 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
32dc0 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
32dd0 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
32de0 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
32df0 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
32e00 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
32e10 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
32e20 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
32e30 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
32e40 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
32e50 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
32e60 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
32e70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
32e80 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
32e90 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
32ea0 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73  , p1) );.    ass
32eb0 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
32ec0 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
32ed0 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
32ee0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
32ef0 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
32f00 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
32f10 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
32f20 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
32f30 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
32f40 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
32f50 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
32f60 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  4.z;.      sqlit
32f70 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
32f80 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
32f90 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
32fa0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
32fb0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
32fc0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
32fd0 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
32fe0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
32ff0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
33000 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
33010 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
33020 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
33030 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
33040 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
33050 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
33060 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
33070 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
33080 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
33090 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
330a0 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
330b0 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
330c0 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
330d0 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
330e0 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
330f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
33100 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
33110 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
33120 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
33130 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
33140 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
33150 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
33160 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
33170 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
33180 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
33190 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
331a0 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
331b0 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33   pVTab ) sqlite3
331c0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
331d0 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62  (p, pVTab->pVtab
331e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
331f0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
33200 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
33210 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
33220 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33230 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
33240 20 56 43 72 65 61 74 65 20 50 31 20 50 32 20 2a   VCreate P1 P2 *
33250 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73   * *.**.** P2 is
33260 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
33270 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20   holds the name 
33280 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
33290 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a  le in database .
332a0 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20  ** P1. Call the 
332b0 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66  xCreate method f
332c0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
332d0 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74  /.case OP_VCreat
332e0 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b  e: {.  Mem sMem;
332f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
33300 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63   storing the rec
33310 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
33320 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  d */.  const cha
33330 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d  r *zTab;  /* Nam
33340 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  e of the virtual
33350 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d   table */..  mem
33360 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
33370 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73  zeof(sMem));.  s
33380 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f  Mem.db = db;.  /
33390 2a 20 42 65 63 61 75 73 65 20 50 32 20 69 73 20  * Because P2 is 
333a0 61 6c 77 61 79 73 20 61 20 73 74 61 74 69 63 20  always a static 
333b0 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d  string, it is im
333c0 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65  possible for the
333d0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
333e0 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61  eMemCopy() to fa
333f0 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  il */.  assert( 
33400 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66  (aMem[pOp->p2].f
33410 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21  lags & MEM_Str)!
33420 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
33430 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66  (aMem[pOp->p2].f
33440 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69  lags & MEM_Stati
33450 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  c)!=0 );.  rc = 
33460 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
33470 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b  py(&sMem, &aMem[
33480 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73  pOp->p2]);.  ass
33490 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
334a0 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28  OK );.  zTab = (
334b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69  const char*)sqli
334c0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
334d0 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28  sMem);.  assert(
334e0 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c   zTab || db->mal
334f0 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69  locFailed );.  i
33500 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72  f( zTab ){.    r
33510 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
33520 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f  allCreate(db, pO
33530 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d  p->p1, zTab, &p-
33540 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
33550 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
33560 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
33570 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
33580 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
33590 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
335a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
335b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
335c0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
335d0 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20  stroy P1 * * P4 
335e0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
335f0 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
33600 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
33610 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20  abase P1.  Call 
33620 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  the xDestroy met
33630 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  hod.** of that t
33640 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
33650 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64  _VDestroy: {.  d
33660 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a  b->nVDestroy++;.
33670 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
33680 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
33690 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
336a0 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44  p4.z);.  db->nVD
336b0 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 62 72 65 61  estroy--;.  brea
336c0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
336d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
336e0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
336f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
33700 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
33710 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
33720 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
33730 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
33740 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
33750 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
33760 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
33770 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
33780 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
33790 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
337a0 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
337b0 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
337c0 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
337d0 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
337e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
337f0 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
33800 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
33810 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
33820 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65  *pVCur;.  sqlite
33830 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
33840 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
33850 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
33860 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
33870 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75  sReader );.  pCu
33880 72 20 3d 20 30 3b 0a 20 20 70 56 43 75 72 20 3d  r = 0;.  pVCur =
33890 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   0;.  pVtab = pO
338a0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
338b0 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d  ab;.  if( pVtab=
338c0 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61  =0 || NEVER(pVta
338d0 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29  b->pModule==0) )
338e0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
338f0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72  E_LOCKED;.    br
33900 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75  eak;.  }.  pModu
33910 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
33920 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  ule;.  rc = pMod
33930 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62  ule->xOpen(pVtab
33940 2c 20 26 70 56 43 75 72 29 3b 0a 20 20 73 71 6c  , &pVCur);.  sql
33950 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
33960 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
33970 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d    if( SQLITE_OK=
33980 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  =rc ){.    /* In
33990 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
339a0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
339b0 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20 70  e class */.    p
339c0 56 43 75 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  VCur->pVtab = pV
339d0 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69  tab;..    /* Ini
339e0 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72  tialize vdbe cur
339f0 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
33a00 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
33a10 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
33a20 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54 59  p1, 0, -1, CURTY
33a30 50 45 5f 56 54 41 42 29 3b 0a 20 20 20 20 69 66  PE_VTAB);.    if
33a40 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20  ( pCur ){.      
33a50 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d  pCur->uc.pVCur =
33a60 20 70 56 43 75 72 3b 0a 20 20 20 20 20 20 70 56   pVCur;.      pV
33a70 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 20  tab->nRef++;.   
33a80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
33a90 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63  sert( db->malloc
33aa0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
33ab0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
33ac0 70 56 43 75 72 29 3b 0a 20 20 20 20 20 20 67 6f  pVCur);.      go
33ad0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
33ae0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
33af0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33b00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
33b10 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
33b20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
33b30 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
33b40 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32  e: VFilter P1 P2
33b50 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
33b60 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33  psis: iplan=r[P3
33b70 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a  ] zplan='P4'.**.
33b80 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
33b90 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56  r opened using V
33ba0 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20  Open.  P2 is an 
33bb0 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
33bc0 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c  to if.** the fil
33bd0 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74  tered result set
33be0 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a   is empty..**.**
33bf0 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55   P4 is either NU
33c00 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74  LL or a string t
33c10 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65  hat was generate
33c20 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e  d by the xBestIn
33c30 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  dex.** method of
33c40 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68   the module.  Th
33c50 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
33c60 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e   of the P4 strin
33c70 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20  g is left.** to 
33c80 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
33c90 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  mentation..**.**
33ca0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
33cb0 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72  okes the xFilter
33cc0 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76   method on the v
33cd0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65  irtual table spe
33ce0 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e  cified.** by P1.
33cf0 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75    The integer qu
33d00 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74  ery plan paramet
33d10 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73  er to xFilter is
33d20 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
33d30 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73  ter.** P3. Regis
33d40 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20  ter P3+1 stores 
33d50 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74  the argc paramet
33d60 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20  er to be passed 
33d70 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65  to the.** xFilte
33d80 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74  r method. Regist
33d90 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61  ers P3+2..P3+1+a
33da0 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63  rgc are the argc
33db0 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  .** additional p
33dc0 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20  arameters which 
33dd0 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a  are passed to.**
33de0 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76   xFilter as argv
33df0 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20  . Register P3+2 
33e00 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20  becomes argv[0] 
33e10 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78  when passed to x
33e20 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20  Filter..**.** A 
33e30 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
33e40 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  P2 if the result
33e50 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65   set after filte
33e60 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d  ring would be em
33e70 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pty..*/.case OP_
33e80 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20  VFilter: {   /* 
33e90 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  jump */.  int nA
33ea0 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79  rg;.  int iQuery
33eb0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
33ec0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
33ed0 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79  e;.  Mem *pQuery
33ee0 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a  ;.  Mem *pArgc;.
33ef0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
33f00 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20  ursor *pVCur;.  
33f10 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
33f20 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
33f30 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
33f40 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
33f50 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
33f60 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
33f70 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
33f80 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
33f90 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
33fa0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
33fb0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
33fc0 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
33fd0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
33fe0 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
33ff0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75  ssert( pCur->eCu
34000 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
34010 54 41 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d  TAB );.  pVCur =
34020 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b   pCur->uc.pVCur;
34030 0a 20 20 70 56 74 61 62 20 3d 20 70 56 43 75 72  .  pVtab = pVCur
34040 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
34050 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
34060 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
34070 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
34080 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
34090 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
340a0 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
340b0 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
340c0 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
340d0 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
340e0 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
340f0 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
34100 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
34110 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
34120 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
34130 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  */.  res = 0;.  
34140 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
34150 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69  ;.  for(i = 0; i
34160 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
34170 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
34180 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72  gc[i+1];.  }.  r
34190 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
341a0 6c 74 65 72 28 70 56 43 75 72 2c 20 69 51 75 65  lter(pVCur, iQue
341b0 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
341c0 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73  Arg, apArg);.  s
341d0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
341e0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
341f0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
34200 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73  TE_OK ){.    res
34210 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
34220 28 70 56 43 75 72 29 3b 0a 20 20 7d 0a 20 20 70  (pVCur);.  }.  p
34230 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
34240 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
34250 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
34260 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
34270 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
34280 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
34290 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
342a0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
342b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
342c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
342d0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
342e0 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
342f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
34300 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a  ]=vcolumn(P2).**
34310 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
34320 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
34330 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
34340 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
34350 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
34360 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
34370 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
34380 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
34390 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
343a0 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
343b0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
343c0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
343d0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
343e0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
343f0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
34400 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
34410 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
34420 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
34430 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
34440 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
34450 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
34460 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
34470 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
34480 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
34490 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
344a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
344b0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
344c0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
344d0 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
344e0 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
344f0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
34500 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
34510 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
34520 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  pCur->uc.pVCur->
34530 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
34540 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
34550 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
34560 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
34570 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
34580 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
34590 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f  Context));.  sCo
345a0 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65  ntext.pOut = pDe
345b0 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  st;.  MemSetType
345c0 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
345d0 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d  Null);.  rc = pM
345e0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
345f0 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26  Cur->uc.pVCur, &
34600 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70  sContext, pOp->p
34610 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  2);.  sqlite3Vta
34620 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
34630 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73   pVtab);.  if( s
34640 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20  Context.isError 
34650 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e  ){.    rc = sCon
34660 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20  text.isError;.  
34670 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
34680 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44  hangeEncoding(pD
34690 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  est, encoding);.
346a0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
346b0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
346c0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
346d0 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
346e0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
346f0 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
34700 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
34710 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
34720 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
34730 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
34740 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
34750 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34760 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
34770 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20  * Opcode: VNext 
34780 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
34790 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61  * Advance virtua
347a0 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68  l table P1 to th
347b0 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74  e next row in it
347c0 73 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64  s result set and
347d0 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  .** jump to inst
347e0 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c  ruction P2.  Or,
347f0 20 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   if the virtual 
34800 74 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65  table has reache
34810 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  d.** the end of 
34820 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20  its result set, 
34830 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
34840 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
34850 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
34860 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20  se OP_VNext: {  
34870 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71   /* jump */.  sq
34880 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
34890 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
348a0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
348b0 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  le;.  int res;. 
348c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
348d0 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  r;..  res = 0;. 
348e0 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
348f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
34900 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
34910 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
34920 42 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  B );.  if( pCur-
34930 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
34940 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
34950 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56  ab = pCur->uc.pV
34960 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  Cur->pVtab;.  pM
34970 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
34980 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
34990 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74  ( pModule->xNext
349a0 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65   );..  /* Invoke
349b0 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74   the xNext() met
349c0 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
349d0 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77  e. There is no w
349e0 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ay for the.  ** 
349f0 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65  underlying imple
34a00 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74  mentation to ret
34a10 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20  urn an error if 
34a20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e  one occurs durin
34a30 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20  g.  ** xNext(). 
34a40 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65  Instead, if an e
34a50 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75  rror occurs, tru
34a60 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69  e is returned (i
34a70 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a  ndicating that .
34a80 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61    ** data is ava
34a90 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20  ilable) and the 
34aa0 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72  error code retur
34ab0 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e  ned when xColumn
34ac0 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74   or.  ** some ot
34ad0 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65  her method is ne
34ae0 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68  xt invoked on th
34af0 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74  e save virtual t
34b00 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a  able cursor..  *
34b10 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  /.  rc = pModule
34b20 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63  ->xNext(pCur->uc
34b30 2e 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74  .pVCur);.  sqlit
34b40 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
34b50 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
34b60 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
34b70 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
34b80 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
34b90 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20  r->uc.pVCur);.  
34ba0 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
34bb0 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69  ken(!res,2);.  i
34bc0 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f  f( !res ){.    /
34bd0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61  * If there is da
34be0 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a  ta, jump to P2 *
34bf0 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  /.    goto jump_
34c00 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
34c10 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  for_interrupt;. 
34c20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
34c30 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
34c40 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
34c50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
34c60 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
34c70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
34c80 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
34c90 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a  de: VRename P1 *
34ca0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
34cb0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
34cc0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
34cd0 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
34ce0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
34cf0 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
34d00 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
34d10 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65  orresponding xRe
34d20 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65  name method. The
34d30 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67   value.** in reg
34d40 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73  ister P1 is pass
34d50 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20  ed as the zName 
34d60 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
34d70 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a  xRename method..
34d80 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61  */.case OP_VRena
34d90 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  me: {.  sqlite3_
34da0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d  vtab *pVtab;.  M
34db0 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56  em *pName;..  pV
34dc0 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
34dd0 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e  tab->pVtab;.  pN
34de0 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ame = &aMem[pOp-
34df0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
34e00 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
34e10 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73  xRename );.  ass
34e20 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
34e30 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65  pName) );.  asse
34e40 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
34e50 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  =0 );.  REGISTER
34e60 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
34e70 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74  pName);.  assert
34e80 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26  ( pName->flags &
34e90 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65   MEM_Str );.  te
34ea0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
34eb0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
34ec0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
34ed0 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
34ee0 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74  E_UTF16BE );.  t
34ef0 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
34f00 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
34f10 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  6LE );.  rc = sq
34f20 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
34f30 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53  ncoding(pName, S
34f40 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69  QLITE_UTF8);.  i
34f50 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
34f60 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74   ){.    rc = pVt
34f70 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
34f80 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d  name(pVtab, pNam
34f90 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74  e->z);.    sqlit
34fa0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
34fb0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
34fc0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
34fd0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
34fe0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
34ff0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
35000 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
35010 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20  ode: VUpdate P1 
35020 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
35030 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b  ynopsis: data=r[
35040 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20  P3@P2].**.** P4 
35050 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
35060 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
35070 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
35080 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
35090 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
350a0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
350b0 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64  rresponding xUpd
350c0 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76  ate method. P2 v
350d0 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  alues.** are con
350e0 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63  tiguous memory c
350f0 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74  ells starting at
35100 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74   P3 to pass to t
35110 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69  he xUpdate .** i
35120 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76  nvocation. The v
35130 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
35140 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65   (P3+P2-1) corre
35150 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a  sponds to the .*
35160 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f  * p2th element o
35170 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79  f the argv array
35180 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61   passed to xUpda
35190 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55  te..**.** The xU
351a0 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c  pdate method wil
351b0 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72  l do a DELETE or
351c0 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f   an INSERT or bo
351d0 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b  th..** The argv[
351e0 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63  0] element (whic
351f0 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  h corresponds to
35200 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29   memory cell P3)
35210 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64  .** is the rowid
35220 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c   of a row to del
35230 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d  ete.  If argv[0]
35240 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f   is NULL then no
35250 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63   .** deletion oc
35260 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b  curs.  The argv[
35270 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68  1] element is th
35280 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e  e rowid of the n
35290 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69  ew .** row.  Thi
352a0 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f  s can be NULL to
352b0 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61   have the virtua
352c0 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74  l table select t
352d0 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64  he new .** rowid
352e0 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68   for itself.  Th
352f0 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65  e subsequent ele
35300 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72  ments in the arr
35310 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76  ay are .** the v
35320 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73  alues of columns
35330 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
35340 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20  .**.** If P2==1 
35350 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69  then no insert i
35360 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72  s performed.  ar
35370 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77  gv[0] is the row
35380 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74  id of.** a row t
35390 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20  o delete..**.** 
353a0 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 is a boolean 
353b0 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73  flag. If it is s
353c0 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74  et to true and t
353d0 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a  he xUpdate call.
353e0 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c  ** is successful
353f0 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
35400 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
35410 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
35420 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20  _rowid() .** is 
35430 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
35440 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f   of the rowid fo
35450 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69  r the row just i
35460 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  nserted..**.** P
35470 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61  5 is the error a
35480 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61  ctions (OE_Repla
35490 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f  ce, OE_Fail, OE_
354a0 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a  Ignore, etc) to.
354b0 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20  ** apply in the 
354c0 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72  case of a constr
354d0 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20  aint failure on 
354e0 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64  an insert or upd
354f0 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
35500 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
35510 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
35520 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
35530 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
35540 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
35550 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
35560 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
35570 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
35580 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72  em *pX;..  asser
35590 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20  t( pOp->p2==1   
355a0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
355b0 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f  =OE_Fail   || pO
355c0 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  p->p5==OE_Rollba
355d0 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ck .       || pO
355e0 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p5==OE_Abort 
355f0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  || pOp->p5==OE_I
35600 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  gnore || pOp->p5
35610 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29  ==OE_Replace.  )
35620 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
35630 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
35640 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
35650 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
35660 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
35670 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
35680 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
35690 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
356a0 45 44 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ED;.    break;. 
356b0 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70   }.  pModule = p
356c0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
356d0 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b   nArg = pOp->p2;
356e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
356f0 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20  p4type==P4_VTAB 
35700 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28  );.  if( ALWAYS(
35710 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
35720 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62  ) ){.    u8 vtab
35730 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d  OnConflict = db-
35740 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b  >vtabOnConflict;
35750 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
35760 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20  apArg;.    pX = 
35770 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
35780 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e      for(i=0; i<n
35790 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Arg; i++){.     
357a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
357b0 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20  lid(pX) );.     
357c0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
357d0 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20  e(p, pX);.      
357e0 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20  apArg[i] = pX;. 
357f0 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d       pX++;.    }
35800 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
35810 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70  onflict = pOp->p
35820 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  5;.    rc = pMod
35830 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74  ule->xUpdate(pVt
35840 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c  ab, nArg, apArg,
35850 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62   &rowid);.    db
35860 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  ->vtabOnConflict
35870 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63   = vtabOnConflic
35880 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  t;.    sqlite3Vt
35890 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
358a0 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
358b0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
358c0 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  && pOp->p1 ){.  
358d0 20 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67      assert( nArg
358e0 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26  >1 && apArg[0] &
358f0 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61  & (apArg[0]->fla
35900 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a  gs&MEM_Null) );.
35910 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f        db->lastRo
35920 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20  wid = lastRowid 
35930 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20  = rowid;.    }. 
35940 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
35950 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
35960 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  INT && pOp->p4.p
35970 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e  Vtab->bConstrain
35980 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  t ){.      if( p
35990 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p5==OE_Ignor
359a0 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  e ){.        rc 
359b0 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
359c0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
359d0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
359e0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45   = ((pOp->p5==OE
359f0 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41  _Replace) ? OE_A
35a00 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b  bort : pOp->p5);
35a10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
35a20 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68  se{.      p->nCh
35a30 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  ange++;.    }.  
35a40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
35a50 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35a60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
35a70 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  */..#ifndef  SQL
35a80 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
35a90 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
35aa0 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50  : Pagecount P1 P
35ab0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72  2 * * *.**.** Wr
35ac0 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ite the current 
35ad0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
35ae0 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74  in database P1 t
35af0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32  o memory cell P2
35b00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67  ..*/.case OP_Pag
35b10 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  ecount: {       
35b20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
35b30 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
35b40 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
35b50 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
35b60 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
35b70 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  age(db->aDb[pOp-
35b80 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65  >p1].pBt);.  bre
35b90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23  ak;.}.#endif...#
35ba0 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
35bb0 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
35bc0 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78  S./* Opcode: Max
35bd0 50 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a  Pgcnt P1 P2 P3 *
35be0 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20   *.**.** Try to 
35bf0 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  set the maximum 
35c00 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64  page count for d
35c10 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68  atabase P1 to th
35c20 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a  e value in P3..*
35c30 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65  * Do not let the
35c40 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
35c50 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74  unt fall below t
35c60 68 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20  he current page 
35c70 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20  count and.** do 
35c80 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d  not change the m
35c90 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
35ca0 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30  t value if P3==0
35cb0 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ..**.** Store th
35cc0 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
35cd0 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63  ount after the c
35ce0 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65  hange in registe
35cf0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
35d00 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20  _MaxPgcnt: {    
35d10 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
35d20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
35d30 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65  t newMax;.  Btre
35d40 65 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20  e *pBt;..  pOut 
35d50 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
35d60 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42 74 20  (p, pOp);.  pBt 
35d70 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
35d80 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78  1].pBt;.  newMax
35d90 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
35da0 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61  >p3 ){.    newMa
35db0 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  x = sqlite3Btree
35dc0 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20  LastPage(pBt);. 
35dd0 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20     if( newMax < 
35de0 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
35df0 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e  3 ) newMax = (un
35e00 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a  signed)pOp->p3;.
35e10 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
35e20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61  = sqlite3BtreeMa
35e30 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20  xPageCount(pBt, 
35e40 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b  newMax);.  break
35e50 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ;.}.#endif.../* 
35e60 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50  Opcode: Init * P
35e70 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
35e80 70 73 69 73 3a 20 20 53 74 61 72 74 20 61 74 20  psis:  Start at 
35e90 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d  P2.**.** Program
35ea0 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  s contain a sing
35eb0 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  le instance of t
35ec0 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68  his opcode as th
35ed0 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20  e very first.** 
35ee0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  opcode..**.** If
35ef0 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62   tracing is enab
35f00 6c 65 64 20 28 62 79 20 74 68 65 20 73 71 6c 69  led (by the sqli
35f10 74 65 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74  te3_trace()) int
35f20 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20  erface, then.** 
35f30 74 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67  the UTF-8 string
35f40 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34   contained in P4
35f50 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74   is emitted on t
35f60 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63  he trace callbac
35f70 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69  k..** Or if P4 i
35f80 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65  s blank, use the
35f90 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
35fa0 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28   by sqlite3_sql(
35fb0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69  )..**.** If P2 i
35fc0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70  s not zero, jump
35fd0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
35fe0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
35ff0 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nit: {          
36000 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61  /* jump */.  cha
36010 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61  r *zTrace;.  cha
36020 72 20 2a 7a 3b 0a 0a 23 69 66 6e 64 65 66 20 53  r *z;..#ifndef S
36030 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
36040 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63  .  if( db->xTrac
36050 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e  e.   && !p->doin
36060 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54  gRerun.   && (zT
36070 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e  race = (pOp->p4.
36080 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20  z ? pOp->p4.z : 
36090 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29  p->zSql))!=0.  )
360a0 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65  {.    z = sqlite
360b0 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70  3VdbeExpandSql(p
360c0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64  , zTrace);.    d
360d0 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54  b->xTrace(db->pT
360e0 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20  raceArg, z);.   
360f0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
36100 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65  b, z);.  }.#ifde
36110 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e  f SQLITE_USE_FCN
36120 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63  TL_TRACE.  zTrac
36130 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
36140 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
36150 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72  zSql);.  if( zTr
36160 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  ace ){.    int i
36170 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
36180 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
36190 20 20 20 20 20 20 69 66 28 20 44 62 4d 61 73 6b        if( DbMask
361a0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
361b0 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69  k, i)==0 ) conti
361c0 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
361d0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
361e0 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  db, db->aDb[i].z
361f0 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e  Name, SQLITE_FCN
36200 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65  TL_TRACE, zTrace
36210 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  );.    }.  }.#en
36220 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
36230 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f  E_FCNTL_TRACE */
36240 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
36250 45 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e  EBUG.  if( (db->
36260 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53  flags & SQLITE_S
36270 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26  qlTrace)!=0.   &
36280 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
36290 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
362a0 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
362b0 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  0.  ){.    sqlit
362c0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53  e3DebugPrintf("S
362d0 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c  QL-trace: %s\n",
362e0 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65   zTrace);.  }.#e
362f0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44  ndif /* SQLITE_D
36300 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  EBUG */.#endif /
36310 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  * SQLITE_OMIT_TR
36320 41 43 45 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ACE */.  if( pOp
36330 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ->p2 ) goto jump
36340 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
36350 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
36360 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
36370 48 49 4e 54 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  HINTS./* Opcode:
36380 20 43 75 72 73 6f 72 48 69 6e 74 20 50 31 20 2a   CursorHint P1 *
36390 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 72   * P4 *.**.** Pr
363a0 6f 76 69 64 65 20 61 20 68 69 6e 74 20 74 6f 20  ovide a hint to 
363b0 63 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 69  cursor P1 that i
363c0 74 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74 6f 20  t only needs to 
363d0 72 65 74 75 72 6e 20 72 6f 77 73 20 74 68 61 74  return rows that
363e0 0a 2a 2a 20 73 61 74 69 73 66 79 20 74 68 65 20  .** satisfy the 
363f0 45 78 70 72 20 69 6e 20 50 34 2e 20 20 54 4b 5f  Expr in P4.  TK_
36400 52 45 47 49 53 54 45 52 20 74 65 72 6d 73 20 69  REGISTER terms i
36410 6e 20 74 68 65 20 50 34 20 65 78 70 72 65 73 73  n the P4 express
36420 69 6f 6e 20 72 65 66 65 72 0a 2a 2a 20 74 6f 20  ion refer.** to 
36430 76 61 6c 75 65 73 20 63 75 72 72 65 6e 74 6c 79  values currently
36440 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
36450 72 73 2e 20 20 54 4b 5f 43 4f 4c 55 4d 4e 20 74  rs.  TK_COLUMN t
36460 65 72 6d 73 20 69 6e 20 74 68 65 20 50 34 0a 2a  erms in the P4.*
36470 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66  * expression ref
36480 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  er to columns in
36490 20 74 68 65 20 62 2d 74 72 65 65 20 74 6f 20 77   the b-tree to w
364a0 68 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69  hich cursor P1 i
364b0 73 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2f 0a 63  s pointing..*/.c
364c0 61 73 65 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e  ase OP_CursorHin
364d0 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
364e0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
364f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
36500 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
36510 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
36520 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
36530 45 58 50 52 20 29 3b 0a 20 20 70 43 20 3d 20 70  EXPR );.  pC = p
36540 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
36550 3b 0a 20 20 69 66 28 20 70 43 20 29 7b 0a 20 20  ;.  if( pC ){.  
36560 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
36570 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
36580 42 54 52 45 45 20 29 3b 0a 20 20 20 20 73 71 6c  BTREE );.    sql
36590 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
365a0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
365b0 6f 72 2c 20 42 54 52 45 45 5f 48 49 4e 54 5f 52  or, BTREE_HINT_R
365c0 41 4e 47 45 2c 0a 20 20 20 20 20 20 20 20 20 20  ANGE,.          
365d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365e0 20 70 4f 70 2d 3e 70 34 2e 70 45 78 70 72 2c 20   pOp->p4.pExpr, 
365f0 61 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  aMem);.  }.  bre
36600 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
36610 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
36620 52 53 4f 52 5f 48 49 4e 54 53 20 2a 2f 0a 0a 2f  RSOR_HINTS */../
36630 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a  * Opcode: Noop *
36640 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
36650 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73  o nothing.  This
36660 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
36670 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20  often useful as 
36680 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e  a jump.** destin
36690 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20  ation..*/./*.** 
366a0 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69  The magic Explai
366b0 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c  n opcode are onl
366c0 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20  y inserted when 
366d0 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63  explain==2 (whic
366e0 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77  h.** is to say w
366f0 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20  hen the EXPLAIN 
36700 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61  QUERY PLAN synta
36710 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54  x is used.).** T
36720 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72  his opcode recor
36730 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ds information f
36740 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65  rom the optimize
36750 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a  r.  It is the.**
36760 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e   the same as a n
36770 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f  o-op.  This opco
36780 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72 73  desnever appears
36790 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72   in a real VM pr
367a0 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c  ogram..*/.defaul
367b0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
367c0 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20   This is really 
367d0 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45  OP_Noop and OP_E
367e0 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65  xplain */.  asse
367f0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
36800 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d  =OP_Noop || pOp-
36810 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  >opcode==OP_Expl
36820 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ain );.  break;.
36830 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  }../************
36840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36880 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f  *.** The cases o
36890 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  f the switch sta
368a0 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69  tement above thi
368b0 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c  s line should al
368c0 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a  l be indented.**
368d0 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
368e0 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
368f0 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20 62   6 spaces have b
36900 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69  een removed to i
36910 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65  mprove the.** re
36920 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d  adability.  From
36930 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64   this point on d
36940 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20  own, the normal 
36950 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65  indentation rule
36960 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65  s are.** restore
36970 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  d..*************
36980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
369a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
369b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
369c0 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20  /.    }..#ifdef 
369d0 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
369e0 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64   {.      u64 end
369f0 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77  Time = sqlite3Hw
36a00 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66  time();.      if
36a10 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20  ( endTime>start 
36a20 29 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65  ) pOrigOp->cycle
36a30 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73  s += endTime - s
36a40 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 72 69  tart;.      pOri
36a50 67 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20  gOp->cnt++;.    
36a60 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
36a70 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
36a80 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67  ode adds nothing
36a90 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
36aa0 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20  unctionality.   
36ab0 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72   ** of the progr
36ac0 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  am.  It is only 
36ad0 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67  here for testing
36ae0 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a   and debugging..
36af0 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74      ** On the ot
36b00 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65  her hand, it doe
36b10 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65  s burn CPU cycle
36b20 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72  s every time thr
36b30 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20  ough.    ** the 
36b40 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20  evaluator loop. 
36b50 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65   So we can leave
36b60 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45   it out when NDE
36b70 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
36b80 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e      */.#ifndef N
36b90 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
36ba0 28 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d 20  ( pOp>=&aOp[-1] 
36bb0 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e  && pOp<&aOp[p->n
36bc0 4f 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65 66  Op-1] );..#ifdef
36bd0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
36be0 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
36bf0 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
36c00 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ce ){.      if( 
36c10 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22  rc!=0 ) printf("
36c20 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20  rc=%d\n",rc);.  
36c30 20 20 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d      if( pOrigOp-
36c40 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46 4c  >opflags & (OPFL
36c50 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20 20  G_OUT2) ){.     
36c60 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
36c70 28 70 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26 61  (pOrigOp->p2, &a
36c80 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32 5d  Mem[pOrigOp->p2]
36c90 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
36ca0 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f 70   if( pOrigOp->op
36cb0 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
36cc0 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65  T3 ){.        re
36cd0 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 72 69  gisterTrace(pOri
36ce0 67 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  gOp->p3, &aMem[p
36cf0 4f 72 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  OrigOp->p3]);.  
36d00 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
36d10 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  if  /* SQLITE_DE
36d20 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f  BUG */.#endif  /
36d30 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20  * NDEBUG */.  } 
36d40 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74   /* The end of t
36d50 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20  he for(;;) loop 
36d60 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67  the loops throug
36d70 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20  h opcodes */..  
36d80 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74  /* If we reach t
36d90 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65  his point, it me
36da0 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69  ans that executi
36db0 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77  on is finished w
36dc0 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f  ith.  ** an erro
36dd0 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a  r of some kind..
36de0 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f    */.vdbe_error_
36df0 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20  halt:.  assert( 
36e00 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  rc );.  p->rc = 
36e10 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  rc;.  testcase( 
36e20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
36e30 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20  fig.xLog!=0 );. 
36e40 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c   sqlite3_log(rc,
36e50 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72   "statement abor
36e60 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25  ts at %d: [%s] %
36e70 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  s", .           
36e80 20 20 20 20 20 20 20 20 28 69 6e 74 29 28 70 4f          (int)(pO
36e90 70 20 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53 71  p - aOp), p->zSq
36ea0 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
36eb0 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c    sqlite3VdbeHal
36ec0 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  t(p);.  if( rc==
36ed0 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
36ee0 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  EM ) db->mallocF
36ef0 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20  ailed = 1;.  rc 
36f00 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
36f10 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d    if( resetSchem
36f20 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20  aOnFault>0 ){.  
36f30 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
36f40 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65  eSchema(db, rese
36f50 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31  tSchemaOnFault-1
36f60 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69  );.  }..  /* Thi
36f70 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
36f80 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72  y out of this pr
36f90 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76  ocedure.  We hav
36fa0 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73  e to.  ** releas
36fb0 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e  e the mutexes on
36fc0 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72   btrees that wer
36fd0 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68  e acquired at th
36fe0 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76  e.  ** top. */.v
36ff0 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62  dbe_return:.  db
37000 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
37010 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63  stRowid;.  testc
37020 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29  ase( nVmStep>0 )
37030 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  ;.  p->aCounter[
37040 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
37050 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69  S_VM_STEP] += (i
37060 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71  nt)nVmStep;.  sq
37070 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70  lite3VdbeLeave(p
37080 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21  );.  assert( rc!
37090 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 6e 45  =SQLITE_OK || nE
370a0 78 74 72 61 44 65 6c 65 74 65 3d 3d 30 20 0a 20  xtraDelete==0 . 
370b0 20 20 20 20 20 20 7c 7c 20 73 71 6c 69 74 65 33        || sqlite3
370c0 5f 73 74 72 6c 69 6b 65 28 22 44 45 4c 45 54 45  _strlike("DELETE
370d0 25 22 2c 70 2d 3e 7a 53 71 6c 2c 30 29 21 3d 30  %",p->zSql,0)!=0
370e0 20 0a 20 20 29 3b 0a 20 20 72 65 74 75 72 6e 20   .  );.  return 
370f0 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  rc;..  /* Jump t
37100 6f 20 68 65 72 65 20 69 66 20 61 20 73 74 72 69  o here if a stri
37110 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65  ng or blob large
37120 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41  r than SQLITE_MA
37130 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73  X_LENGTH.  ** is
37140 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20   encountered..  
37150 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71  */.too_big:.  sq
37160 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
37170 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  , "string or blo
37180 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72  b too big");.  r
37190 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  c = SQLITE_TOOBI
371a0 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  G;.  goto vdbe_e
371b0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
371c0 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
371d0 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
371e0 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a  s..  */.no_mem:.
371f0 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
37200 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ed = 1;.  sqlite
37210 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6f  3VdbeError(p, "o
37220 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a  ut of memory");.
37230 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
37240 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  MEM;.  goto vdbe
37250 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20  _error_halt;..  
37260 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20  /* Jump to here 
37270 66 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69  for any other ki
37280 6e 64 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f  nd of fatal erro
37290 72 2e 20 20 54 68 65 20 22 72 63 22 20 76 61 72  r.  The "rc" var
372a0 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c  iable.  ** shoul
372b0 64 20 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72  d hold the error
372c0 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62   number..  */.ab
372d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
372e0 3a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a  :.  assert( p->z
372f0 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69  ErrMsg==0 );.  i
37300 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
37310 6c 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  led ) rc = SQLIT
37320 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72  E_NOMEM;.  if( r
37330 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  c!=SQLITE_IOERR_
37340 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c  NOMEM ){.    sql
37350 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
37360 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72   "%s", sqlite3Er
37370 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20  rStr(rc));.  }. 
37380 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
37390 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  _halt;..  /* Jum
373a0 70 20 74 6f 20 68 65 72 65 20 69 66 20 74 68 65  p to here if the
373b0 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
373c0 70 74 28 29 20 41 50 49 20 73 65 74 73 20 74 68  pt() API sets th
373d0 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a  e interrupt.  **
373e0 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72   flag..  */.abor
373f0 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
37400 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64 62  pt:.  assert( db
37410 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
37420 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ed );.  rc = SQL
37430 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
37440 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73   p->rc = rc;.  s
37450 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
37460 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
37470 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67  ErrStr(rc));.  g
37480 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68  oto vdbe_error_h
37490 61 6c 74 3b 0a 7d 0a                             alt;.}.