/ Hex Artifact Content
Login

Artifact eeef2e6ee7c377c31a1b3f6c2b2812f3f711c2d7:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2b00: 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  &= ~(MEM_Real|ME
2b10: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  M_Int);.  }.}../
2b20: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2b30: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2b40: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2b50: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2b60: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2b70: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2b80: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
2b90: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
2ba0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
2bb0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
2bc0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
2bd0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2be0: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2bf0: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2c00: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2c10: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2c20: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2c30: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2c40: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2c50: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2c60: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2c70: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
2c80: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2c90: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
2ca0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
2cb0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
2cc0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
2cd0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2ce0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2cf0: 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70 65  m, 0);.    eType
2d00: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2d10: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2d20: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2d30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2d40: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2d50: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2d60: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2d70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2d80: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2d90: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2da0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2db0: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2dc0: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2dd0: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2de0: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2df0: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2e00: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2e10: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2e20: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d  nc);.}../*.** pM
2e30: 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c  em currently onl
2e40: 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e 67  y holds a string
2e50: 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65 20   type (or maybe 
2e60: 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20 63  a BLOB that we c
2e70: 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74 20  an.** interpret 
2e80: 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20 77  as a string if w
2e90: 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d  e want to).  Com
2ea0: 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73 70  pute its corresp
2eb0: 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69  onding.** numeri
2ec0: 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20 6f  c type, if has o
2ed0: 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d 65  ne.  Set the pMe
2ee0: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
2ef0: 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61  >u.i fields.** a
2f00: 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73  ccordingly..*/.s
2f10: 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54 45  tatic u16 SQLITE
2f20: 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74  _NOINLINE comput
2f30: 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d  eNumericType(Mem
2f40: 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65 72   *pMem){.  asser
2f50: 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
2f60: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
2f70: 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  eal))==0 );.  as
2f80: 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
2f90: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2fa0: 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a 20  M_Blob))!=0 );. 
2fb0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2fc0: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
2fd0: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
2fe0: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
2ff0: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
3000: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  }.  if( sqlite3A
3010: 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26  toi64(pMem->z, &
3020: 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d  pMem->u.i, pMem-
3030: 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d  >n, pMem->enc)==
3040: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3050: 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b   return MEM_Int;
3060: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 45  .  }.  return ME
3070: 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  M_Real;.}../*.**
3080: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 65   Return the nume
3090: 72 69 63 20 74 79 70 65 20 66 6f 72 20 70 4d 65  ric type for pMe
30a0: 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e  m, either MEM_In
30b0: 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72  t or MEM_Real or
30c0: 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65   both or.** none
30d0: 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65  .  .**.** Unlike
30e0: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
30f0: 69 6e 69 74 79 28 29 2c 20 74 68 69 73 20 72 6f  inity(), this ro
3100: 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d  utine does not m
3110: 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67  odify pMem->flag
3120: 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20 64 6f 65  s..** But it doe
3130: 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75 2e 72 20  s set pMem->u.r 
3140: 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 61 70  and pMem->u.i ap
3150: 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a  propriately..*/.
3160: 73 74 61 74 69 63 20 75 31 36 20 6e 75 6d 65 72  static u16 numer
3170: 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d  icType(Mem *pMem
3180: 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66  ){.  if( pMem->f
3190: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
31a0: 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a 20 20 20  MEM_Real) ){.   
31b0: 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c   return pMem->fl
31c0: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
31d0: 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d 0a 20 20  EM_Real);.  }.  
31e0: 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  if( pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
3200: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  lob) ){.    retu
3210: 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69  rn computeNumeri
3220: 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a 20 20 7d  cType(pMem);.  }
3230: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
3240: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3250: 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69 74 65 20  BUG./*.** Write 
3260: 61 20 6e 69 63 65 20 73 74 72 69 6e 67 20 72 65  a nice string re
3270: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3280: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
3290: 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74  cell pMem.** int
32a0: 6f 20 62 75 66 66 65 72 20 7a 42 75 66 2c 20 6c  o buffer zBuf, l
32b0: 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76  ength nBuf..*/.v
32c0: 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 4d  oid sqlite3VdbeM
32d0: 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 4d 65  emPrettyPrint(Me
32e0: 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72 20 2a 7a  m *pMem, char *z
32f0: 42 75 66 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43  Buf){.  char *zC
3300: 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20 69 6e 74  sr = zBuf;.  int
3310: 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   f = pMem->flags
3320: 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  ;..  static cons
3330: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e  t char *const en
3340: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22 28 58 29  cnames[] = {"(X)
3350: 22 2c 20 22 28 38 29 22 2c 20 22 28 31 36 4c 45  ", "(8)", "(16LE
3360: 29 22 2c 20 22 28 31 36 42 45 29 22 7d 3b 0a 0a  )", "(16BE)"};..
3370: 20 20 69 66 28 20 66 26 4d 45 4d 5f 42 6c 6f 62    if( f&MEM_Blob
3380: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
3390: 20 20 20 63 68 61 72 20 63 3b 0a 20 20 20 20 69     char c;.    i
33a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
33b0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 7a 27 3b  {.      c = 'z';
33c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
33d0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
33e0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
33f0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3400: 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29  f & MEM_Static )
3410: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 74 27 3b  {.      c = 't';
3420: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
3430: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
3440: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3450: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3460: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
3470: 20 20 20 20 63 20 3d 20 27 65 27 3b 0a 20 20 20      c = 'e';.   
3480: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3490: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
34a0: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
34b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 20 3d  }else{.      c =
34c0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   's';.    }..   
34d0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
34e0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 63  f(100, zCsr, "%c
34f0: 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43 73 72 20  ", c);.    zCsr 
3500: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3510: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 73 71  30(zCsr);.    sq
3520: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3530: 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c  00, zCsr, "%d[",
3540: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a   pMem->n);.    z
3550: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3560: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3570: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3580: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3590: 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  +){.      sqlite
35a0: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
35b0: 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28  zCsr, "%02X", ((
35c0: 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26  int)pMem->z[i] &
35d0: 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a   0xFF));.      z
35e0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
35f0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3600: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
3610: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
3620: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3630: 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a  char z = pMem->z
3640: 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  [i];.      if( z
3650: 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a  <32 || z>126 ) *
3660: 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20  zCsr++ = '.';.  
3670: 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b      else *zCsr++
3680: 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a 20 20 20   = z;.    }..   
3690: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
36a0: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 5d 25  f(100, zCsr, "]%
36b0: 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  s", encnames[pMe
36c0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 7a 43  m->enc]);.    zC
36d0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
36e0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
36f0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72   if( f & MEM_Zer
3700: 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  o ){.      sqlit
3710: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3720: 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65   zCsr,"+%dz",pMe
3730: 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20  m->u.nZero);.   
3740: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
3750: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
3760: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73  ;.    }.    *zCs
3770: 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73  r = '\0';.  }els
3780: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3790: 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20  r ){.    int j, 
37a0: 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d  k;.    zBuf[0] =
37b0: 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ' ';.    if( f 
37c0: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
37d0: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27     zBuf[1] = 'z'
37e0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
37f0: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
3800: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3810: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3820: 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 20   f & MEM_Static 
3830: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3840: 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73   = 't';.      as
3850: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3860: 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  Dyn|MEM_Ephem))=
3870: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3880: 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65  if( f & MEM_Ephe
3890: 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  m ){.      zBuf[
38a0: 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20  1] = 'e';.      
38b0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
38c0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e  M_Static|MEM_Dyn
38d0: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
38e0: 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31  se{.      zBuf[1
38f0: 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  ] = 's';.    }. 
3900: 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71     k = 2;.    sq
3910: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3920: 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25  00, &zBuf[k], "%
3930: 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  d", pMem->n);.  
3940: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3950: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3960: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3970: 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a  = '[';.    for(j
3980: 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d  =0; j<15 && j<pM
3990: 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20  em->n; j++){.   
39a0: 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e     u8 c = pMem->
39b0: 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[j];.      if( 
39c0: 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78 37  c>=0x20 && c<0x7
39d0: 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  f ){.        zBu
39e0: 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20  f[k++] = c;.    
39f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3a00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27   zBuf[k++] = '.'
3a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
3a20: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
3a30: 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ']';.    sqlite3
3a40: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26 7a  _snprintf(100,&z
3a50: 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73  Buf[k], encnames
3a60: 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20  [pMem->enc]);.  
3a70: 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53 74    k += sqlite3St
3a80: 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29  rlen30(&zBuf[k])
3a90: 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  ;.    zBuf[k++] 
3aa0: 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  = 0;.  }.}.#endi
3ab0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
3ac0: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69  _DEBUG./*.** Pri
3ad0: 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nt the value of 
3ae0: 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20 74  a register for t
3af0: 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73 3a  racing purposes:
3b00: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3b10: 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d 65  memTracePrint(Me
3b20: 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e  m *p){.  if( p->
3b30: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65  flags & MEM_Unde
3b40: 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72 69  fined ){.    pri
3b50: 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64 22  ntf(" undefined"
3b60: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  );.  }else if( p
3b70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
3b80: 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ll ){.    printf
3b90: 28 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c  (" NULL");.  }el
3ba0: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
3bb0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3bc0: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
3bd0: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
3be0: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
3bf0: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
3c00: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3c10: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
3c20: 20 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c    printf(" i:%ll
3c30: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66  d", p->u.i);.#if
3c40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
3c50: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
3c60: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3c70: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
3c80: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3c90: 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  r:%g", p->u.r);.
3ca0: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
3cb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3cc0: 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20 20  M_RowSet ){.    
3cd0: 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65 74  printf(" (rowset
3ce0: 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  )");.  }else{.  
3cf0: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
3d00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3d10: 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
3d20: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70 72  p, zBuf);.    pr
3d30: 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75 66  intf(" %s", zBuf
3d40: 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  );.  }.}.static 
3d50: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
3d60: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
3d70: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
3d80: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
3d90: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
3da0: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
3db0: 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66  ("\n");.}.#endif
3dc0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
3dd0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
3de0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
3df0: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
3e00: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
3e10: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
3e20: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
3e30: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
3e40: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
3e50: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
3e60: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
3e70: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
3e80: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
3e90: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
3ea0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
3eb0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
3ec0: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
3ed0: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
3ee0: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
3ef0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
3f00: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
3f10: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
3f20: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
3f30: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
3f40: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
3f50: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
3f60: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
3f70: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
3f80: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
3f90: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
3fa0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
3fb0: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
3fc0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
3fd0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
3fe0: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
3ff0: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4000: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4010: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4020: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4030: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4040: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
4050: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
4060: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
4070: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
4080: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
4090: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
40a0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
40b0: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
40c0: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
40d0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
40e0: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
40f0: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4100: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4110: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4120: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4130: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4140: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
4150: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
4160: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 20 0a 73 74  er value..*/ .st
4170: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4180: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4190: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
41a0: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
41b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
41c0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
41d0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
41e0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
41f0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
4200: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
4210: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
4220: 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64   pOut);.  if( Vd
4230: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
4240: 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  t) ) sqlite3Vdbe
4250: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
4260: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
4270: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74  = MEM_Int;.  ret
4280: 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 0a 0a 2f 2a  urn pOut;.}.../*
4290: 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d  .** Execute as m
42a0: 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72  uch of a VDBE pr
42b0: 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 2e  ogram as we can.
42c0: 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20  .** This is the 
42d0: 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  core of sqlite3_
42e0: 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74  step().  .*/.int
42f0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63   sqlite3VdbeExec
4300: 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20  (.  Vdbe *p     
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4320: 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b  * The VDBE */.){
4330: 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e  .  Op *aOp = p->
4340: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  aOp;          /*
4350: 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20   Copy of p->aOp 
4360: 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61  */.  Op *pOp = a
4370: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Op;             
4380: 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61  /* Current opera
4390: 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69  tion */.#if defi
43a0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
43b0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42  ) || defined(VDB
43c0: 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20  E_PROFILE).  Op 
43d0: 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20 20 20  *pOrigOp;       
43e0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
43f0: 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65 20 74   of pOp at the t
4400: 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a  op of the loop *
4410: 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72  /.#endif.  int r
4420: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20  c = SQLITE_OK;  
4430: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
4440: 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71  o return */.  sq
4450: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
4460: 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  b;       /* The 
4470: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38  database */.  u8
4480: 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
4490: 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65  ult = 0; /* Rese
44a0: 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20 61  t schema after a
44b0: 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74  n error if posit
44c0: 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f  ive */.  u8 enco
44d0: 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20  ding = ENC(db); 
44e0: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
44f0: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  ase encoding */.
4500: 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d    int iCompare =
4510: 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
4520: 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 4f  Result of last O
4530: 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
4540: 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ion */.  unsigne
4550: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
4560: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4570: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
4580: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
4590: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
45a0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
45b0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
45c0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a  ressLimit = 0;/*
45d0: 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73   Invoke xProgres
45e0: 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70  s() when nVmStep
45f0: 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f   reaches this */
4600: 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61  .#endif.  Mem *a
4610: 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20  Mem = p->aMem;  
4620: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4630: 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d  p->aMem */.  Mem
4640: 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20   *pIn1 = 0;     
4650: 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69          /* 1st i
4660: 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  nput operand */.
4670: 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b    Mem *pIn2 = 0;
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4690: 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e  2nd input operan
46a0: 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33  d */.  Mem *pIn3
46b0: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
46c0: 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f    /* 3rd input o
46d0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
46e0: 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20  *pOut = 0;      
46f0: 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74         /* Output
4700: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e   operand */.  in
4710: 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  t *aPermute = 0;
4720: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72 6d           /* Perm
4730: 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d  utation of colum
4740: 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72  ns for OP_Compar
4750: 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  e */.  i64 lastR
4760: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
4770: 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64 20  owid;  /* Saved 
4780: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61 73  value of the las
4790: 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20 2a  t insert ROWID *
47a0: 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  /.#ifdef VDBE_PR
47b0: 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72  OFILE.  u64 star
47c0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
47d0: 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20     /* CPU clock 
47e0: 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f  count at start o
47f0: 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64  f opcode */.#end
4800: 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54  if.  /*** INSERT
4810: 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52   STACK UNION HER
4820: 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74  E ***/..  assert
4830: 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45  ( p->magic==VDBE
4840: 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f  _MAGIC_RUN );  /
4850: 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  * sqlite3_step()
4860: 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20 2a   verifies this *
4870: 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  /.  sqlite3VdbeE
4880: 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70  nter(p);.  if( p
4890: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ->rc==SQLITE_NOM
48a0: 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  EM ){.    /* Thi
48b0: 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d  s happens if a m
48c0: 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61  alloc() inside a
48d0: 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
48e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f  _column_text() o
48f0: 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  r.    ** sqlite3
4900: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
4910: 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20   failed.  */.   
4920: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
4930: 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  }.  assert( p->r
4940: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
4950: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  p->rc==SQLITE_BU
4960: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4970: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4980: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
4990: 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49  ;.  p->rc = SQLI
49a0: 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72  TE_OK;.  p->iCur
49b0: 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20  rentTime = 0;.  
49c0: 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61  assert( p->expla
49d0: 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52  in==0 );.  p->pR
49e0: 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20  esultSet = 0;.  
49f0: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
4a00: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28  nBusy = 0;.  if(
4a10: 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
4a20: 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f  upted ) goto abo
4a30: 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
4a40: 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  upt;.  sqlite3Vd
4a50: 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b  beIOTraceSql(p);
4a60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4a70: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4a80: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
4a90: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
4aa0: 20 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70    u32 iPrior = p
4ab0: 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
4ac0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
4ad0: 53 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72  STEP];.    asser
4ae0: 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67  t( 0 < db->nProg
4af0: 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e  ressOps );.    n
4b00: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
4b10: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
4b20: 20 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d   - (iPrior % db-
4b30: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
4b40: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
4b50: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
4b60: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
4b70: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69  ignMalloc();.  i
4b80: 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26  f( p->pc==0.   &
4b90: 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  & (p->db->flags 
4ba0: 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  & (SQLITE_VdbeLi
4bb0: 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62  sting|SQLITE_Vdb
4bc0: 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65  eEQP|SQLITE_Vdbe
4bd0: 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a  Trace))!=0.  ){.
4be0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
4bf0: 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20  nt once = 1;.   
4c00: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4c10: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28  tSql(p);.    if(
4c20: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4c30: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
4c40: 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  ng ){.      prin
4c50: 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d  tf("VDBE Program
4c60: 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20   Listing:\n");. 
4c70: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4c80: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4c90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4ca0: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
4cb0: 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20   i, &aOp[i]);.  
4cc0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4cd0: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
4ce0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51   & SQLITE_VdbeEQ
4cf0: 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  P ){.      for(i
4d00: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4d10: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
4d20: 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  aOp[i].opcode==O
4d30: 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20  P_Explain ){.   
4d40: 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20         if( once 
4d50: 29 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 51  ) printf("VDBE Q
4d60: 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a  uery Plan:\n");.
4d70: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66            printf
4d80: 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e  ("%s\n", aOp[i].
4d90: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20  p4.z);.         
4da0: 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20   once = 0;.     
4db0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
4dc0: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4dd0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4de0: 5f 56 64 62 65 54 72 61 63 65 20 29 20 20 70 72  _VdbeTrace )  pr
4df0: 69 6e 74 66 28 22 56 44 42 45 20 54 72 61 63 65  intf("VDBE Trace
4e00: 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  :\n");.  }.  sql
4e10: 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
4e20: 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  loc();.#endif.  
4e30: 66 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e  for(pOp=&aOp[p->
4e40: 70 63 5d 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f  pc]; rc==SQLITE_
4e50: 4f 4b 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20  OK; pOp++){.    
4e60: 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f 70  assert( pOp>=aOp
4e70: 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e   && pOp<&aOp[p->
4e80: 6e 4f 70 5d 29 3b 0a 20 20 20 20 69 66 28 20 64  nOp]);.    if( d
4e90: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
4ea0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23  ) goto no_mem;.#
4eb0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4ec0: 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73  LE.    start = s
4ed0: 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a  qlite3Hwtime();.
4ee0: 23 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74  #endif.    nVmSt
4ef0: 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  ep++;.#ifdef SQL
4f00: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
4f10: 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69  SCANSTATUS.    i
4f20: 66 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70  f( p->anExec ) p
4f30: 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70  ->anExec[(int)(p
4f40: 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64  Op-aOp)]++;.#end
4f50: 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  if..    /* Only 
4f60: 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66  allow tracing if
4f70: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
4f80: 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f   defined..    */
4f90: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4fa0: 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d  EBUG.    if( db-
4fb0: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4fc0: 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20  VdbeTrace ){.   
4fd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
4fe0: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69  intOp(stdout, (i
4ff0: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20  nt)(pOp - aOp), 
5000: 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  pOp);.    }.#end
5010: 69 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f  if.      ..    /
5020: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5030: 66 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d  f we need to sim
5040: 75 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75  ulate an interru
5050: 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68  pt.  This only h
5060: 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66  appens.    ** if
5070: 20 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69   we have a speci
5080: 61 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20  al test build.. 
5090: 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c     */.#ifdef SQL
50a0: 49 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28  ITE_TEST.    if(
50b0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
50c0: 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20  pt_count>0 ){.  
50d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65      sqlite3_inte
50e0: 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20  rrupt_count--;. 
50f0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
5100: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5110: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
5120: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5130: 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  (db);.      }.  
5140: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
5150: 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69  /* Sanity checki
5160: 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72  ng on other oper
5170: 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  ands */.#ifdef S
5180: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
5190: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66  assert( pOp->opf
51a0: 6c 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63  lags==sqlite3Opc
51b0: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
51c0: 3e 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20  >opcode] );.    
51d0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
51e0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d  s & OPFLG_IN1)!=
51f0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5200: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
5210: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5220: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
5230: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5240: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5250: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5260: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
5270: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5280: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5290: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
52a0: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
52b0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
52c0: 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p1, &aMem[pO
52d0: 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p1]);.    }. 
52e0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
52f0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32  lags & OPFLG_IN2
5300: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5310: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
5320: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
5330: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
5340: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
5350: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
5360: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5370: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
5380: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5390: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
53a0: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
53b0: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
53c0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
53d0: 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  E(pOp->p2, &aMem
53e0: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
53f0: 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  }.    if( (pOp->
5400: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
5410: 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN3)!=0 ){.     
5420: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5430: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5440: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5450: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5460: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5470: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5480: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5490: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
54a0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
54b0: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
54c0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
54d0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
54e0: 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61  RACE(pOp->p3, &a
54f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5500: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5510: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5520: 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20  LG_OUT2)!=0 ){. 
5530: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5540: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
5550: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5560: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5570: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
5580: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
5590: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  p, &aMem[pOp->p2
55a0: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
55b0: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
55c0: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
55d0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
55e0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
55f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5600: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
5610: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
5620: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5630: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
5640: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23  p->p3]);.    }.#
5650: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
5660: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
5670: 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f  || defined(VDBE_
5680: 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f 72  PROFILE).    pOr
5690: 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64  igOp = pOp;.#end
56a0: 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63 68  if.  .    switch
56b0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
56c0: 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73  .** What follows
5720: 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73 77   is a massive sw
5730: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77  itch statement w
5740: 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20 69  here each case i
5750: 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73  mplements a.** s
5760: 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63 74  eparate instruct
5770: 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74 75  ion in the virtu
5780: 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66 20  al machine.  If 
5790: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73  we follow the us
57a0: 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69  ual.** indentati
57b0: 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20  on conventions, 
57c0: 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c 64  each case should
57d0: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79 20   be indented by 
57e0: 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a 2a  6 spaces.  But.*
57f0: 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74 20  * that is a lot 
5800: 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65 20  of wasted space 
5810: 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72 67  on the left marg
5820: 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64 65  in.  So the code
5830: 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73   within.** the s
5840: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5850: 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68 20  will break with 
5860: 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62  convention and b
5870: 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e  e flush-left. An
5880: 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d  other.** big com
5890: 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74 6f  ment (similar to
58a0: 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20   this one) will 
58b0: 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20 69  mark the point i
58c0: 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72 65  n the code where
58d0: 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69 6f  .** we transitio
58e0: 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c  n back to normal
58f0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a   indentation..**
5900: 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74 69  .** The formatti
5910: 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65 20  ng of each case 
5920: 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54  is important.  T
5930: 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20  he makefile for 
5940: 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61  SQLite.** genera
5950: 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73 20  tes two C files 
5960: 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64 20  "opcodes.h" and 
5970: 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20 73  "opcodes.c" by s
5980: 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20  canning this.** 
5990: 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  file looking for
59a0: 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67 69   lines that begi
59b0: 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50 5f  n with "case OP_
59c0: 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73 2e  ".  The opcodes.
59d0: 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20  h files.** will 
59e0: 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20 23  be filled with #
59f0: 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69 76  defines that giv
5a00: 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e unique integer
5a10: 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68 0a   values to each.
5a20: 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74 68  ** opcode and th
5a30: 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c 65  e opcodes.c file
5a40: 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68 20   is filled with 
5a50: 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  an array of stri
5a60: 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61 63  ngs where.** eac
5a70: 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  h string is the 
5a80: 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f  symbolic name fo
5a90: 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  r the correspond
5aa0: 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66 20  ing opcode.  If 
5ab0: 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61 74  the.** case stat
5ac0: 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65  ement is followe
5ad0: 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f  d by a comment o
5ae0: 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20 73  f the form "/# s
5af0: 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a  ame as ... #/".*
5b00: 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69  * that comment i
5b10: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
5b20: 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75 6c  ine the particul
5b30: 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ar value of the 
5b40: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74  opcode..**.** Ot
5b50: 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e 20  her keywords in 
5b60: 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74  the comment that
5b70: 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63 61   follows each ca
5b80: 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a 2a  se are used to.*
5b90: 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  * construct the 
5ba0: 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45  OPFLG_INITIALIZE
5bb0: 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e 69  R value that ini
5bc0: 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50  tializes opcodeP
5bd0: 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65  roperty[]..** Ke
5be0: 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a 20  ywords include: 
5bf0: 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f  in1, in2, in3, o
5c00: 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a  ut2, out3.  See.
5c10: 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68  ** the mkopcodeh
5c20: 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72 20  .awk script for 
5c30: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5c40: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f  mation..**.** Do
5c50: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75  cumentation abou
5c60: 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20 69  t VDBE opcodes i
5c70: 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73  s generated by s
5c80: 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  canning this fil
5c90: 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f  e.** for lines o
5ca0: 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 22  f that contain "
5cb0: 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74 20  Opcode:".  That 
5cc0: 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75 62  line and all sub
5cd0: 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65  sequent.** comme
5ce0: 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73 65  nt lines are use
5cf0: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
5d00: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  ion of the opcod
5d10: 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61  e.html documenta
5d20: 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a  tion.** file..**
5d30: 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a  .** SUMMARY:.**.
5d40: 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69 6e  **     Formattin
5d50: 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  g is important t
5d60: 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20 73  o scripts that s
5d70: 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a  can this file..*
5d80: 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65 76  *     Do not dev
5d90: 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66 6f  iate from the fo
5da0: 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20 63  rmatting style c
5db0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e  urrently in use.
5dc0: 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .**.************
5dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5de0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  */../* Opcode:  
5e20: 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a  Goto * P2 * * *.
5e30: 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69  **.** An uncondi
5e40: 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61  tional jump to a
5e50: 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68  ddress P2..** Th
5e60: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
5e70: 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c 6c  on executed will
5e80: 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20   be .** the one 
5e90: 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f 6d  at index P2 from
5ea0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
5eb0: 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61 6d  f.** the program
5ec0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70  ..**.** The P1 p
5ed0: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
5ee0: 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62 79  actually used by
5ef0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 48   this opcode.  H
5f00: 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73  owever, it.** is
5f10: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
5f20: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 30  o 1 instead of 0
5f30: 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   as a hint to th
5f40: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73  e command-line s
5f50: 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69  hell.** that thi
5f60: 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62 6f  s Goto is the bo
5f70: 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61  ttom of a loop a
5f80: 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e 65  nd that the line
5f90: 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a  s from P2 down.*
5fa0: 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  * to the current
5fb0: 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65 20   line should be 
5fc0: 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58 50  indented for EXP
5fd0: 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  LAIN output..*/.
5fe0: 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20  case OP_Goto: { 
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6000: 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  ump */.jump_to_p
6010: 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
6020: 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f 70  interrupt:.  pOp
6030: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6040: 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f  - 1];..  /* Opco
6050: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
6060: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
6070: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
6080: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
6090: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52  * OP_VNext, OP_R
60a0: 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50  owSetNext, or OP
60b0: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
60c0: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
60d0: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
60e0: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
60f0: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
6100: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
6110: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
6120: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6130: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
6140: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
6150: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
6160: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
6170: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
6180: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
6190: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
61a0: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
61b0: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
61c0: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
61d0: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
61e0: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
61f0: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
6200: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
6210: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
6220: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
6230: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
6240: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
6250: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
6260: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
6270: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
6280: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
6290: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
62a0: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
62b0: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
62c0: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69  r_interrupt:.  i
62d0: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
62e0: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
62f0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
6300: 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53  rrupt;.#ifndef S
6310: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
6320: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
6330: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
6340: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
6350: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
6360: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
6370: 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66  d number.  ** of
6380: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
6390: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
63a0: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
63b0: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
63c0: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ** sqlite3VdbeEx
63d0: 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61  ec() or since la
63e0: 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67  st time the prog
63f0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61  ress callback wa
6400: 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20  s called)..  ** 
6410: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
6420: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
6430: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
6440: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
6450: 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ine with.  ** a 
6460: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
6470: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20  TE_ABORT..  */. 
6480: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
6490: 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70  ss!=0 && nVmStep
64a0: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
64b0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
64c0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
64d0: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
64e0: 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53  ressLimit = nVmS
64f0: 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72  tep + db->nProgr
6500: 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65  essOps - (nVmSte
6510: 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  p%db->nProgressO
6520: 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ps);.    if( db-
6530: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
6540: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
6550: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
6560: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
6570: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
6580: 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20  or_halt;.    }. 
6590: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
65a0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
65b0: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
65c0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
65d0: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
65e0: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
65f0: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6600: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6610: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6620: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
6630: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6640: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6650: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
6660: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
6670: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31  ursor) );.  pIn1
6680: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6690: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
66a0: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
66b0: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
66c0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
66d0: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
66e0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
66f0: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
6700: 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45  )(pOp-aOp);.  RE
6710: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6720: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20  ->p1, pIn1);..  
6730: 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65  /* Most jump ope
6740: 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74  rations do a got
6750: 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69  o to this spot i
6760: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
6770: 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70  e.  ** the pOp p
6780: 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f  ointer. */.jump_
6790: 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26  to_p2:.  pOp = &
67a0: 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
67b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
67c0: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
67d0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
67e0: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
67f0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
6800: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
6810: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6820: 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a    After.** the j
6830: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
6840: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
6850: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ed..*/.case OP_R
6860: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6870: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6880: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6890: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
68a0: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
68b0: 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20  _Int );.  pOp = 
68c0: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
68d0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
68e0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
68f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6900: 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75  pcode: InitCorou
6910: 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20  tine P1 P2 P3 * 
6920: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72  *.**.** Set up r
6930: 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68  egister P1 so th
6940: 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64  at it will Yield
6950: 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   to the coroutin
6960: 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20  e.** located at 
6970: 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a  address P3..**.*
6980: 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20  * If P2!=0 then 
6990: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d  the coroutine im
69a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d  plementation imm
69b0: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
69c0: 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
69d0: 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74    So jump over t
69e0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
69f0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a  lementation to.*
6a00: 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  * address P2..**
6a10: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e  .** See also: En
6a20: 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  dCoroutine.*/.ca
6a30: 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74  se OP_InitCorout
6a40: 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75  ine: {     /* ju
6a50: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6a60: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f  pOp->p1>0 &&  pO
6a70: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
6a80: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
6a90: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
6aa0: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  >=0 && pOp->p2<p
6ab0: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72  ->nOp );.  asser
6ac0: 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26  t( pOp->p3>=0 &&
6ad0: 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20   pOp->p3<p->nOp 
6ae0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
6af0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6b00: 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79  sert( !VdbeMemDy
6b10: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20  namic(pOut) );. 
6b20: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
6b30: 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74  ->p3 - 1;.  pOut
6b40: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
6b50: 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  t;.  if( pOp->p2
6b60: 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
6b70: 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
6b80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43  /* Opcode:  EndC
6b90: 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20  oroutine P1 * * 
6ba0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  * *.**.** The in
6bb0: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65  struction at the
6bc0: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6bd0: 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69 65  ster P1 is a Yie
6be0: 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  ld..** Jump to t
6bf0: 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 20  he P2 parameter 
6c00: 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a  of that Yield..*
6c10: 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70  * After the jump
6c20: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
6c30: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
6c40: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6c50: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
6c60: 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72  /.case OP_EndCor
6c70: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20  outine: {       
6c80: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
6c90: 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b  VdbeOp *pCaller;
6ca0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6cb0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6cc0: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
6cd0: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73  =MEM_Int );.  as
6ce0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e  sert( pIn1->u.i>
6cf0: 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c  =0 && pIn1->u.i<
6d00: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c  p->nOp );.  pCal
6d10: 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d  ler = &aOp[pIn1-
6d20: 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  >u.i];.  assert(
6d30: 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65   pCaller->opcode
6d40: 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20  ==OP_Yield );.  
6d50: 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d  assert( pCaller-
6d60: 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65  >p2>=0 && pCalle
6d70: 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  r->p2<p->nOp );.
6d80: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61    pOp = &aOp[pCa
6d90: 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  ller->p2 - 1];. 
6da0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6db0: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6dc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6dd0: 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50  ode:  Yield P1 P
6de0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77  2 * * *.**.** Sw
6df0: 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63  ap the program c
6e00: 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20  ounter with the 
6e10: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
6e20: 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68  r P1.  This.** h
6e30: 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66  as the effect of
6e40: 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63   yielding to a c
6e50: 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20  oroutine..**.** 
6e60: 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  If the coroutine
6e70: 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65   that is launche
6e80: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
6e90: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
6ea0: 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75  ** Yield or Retu
6eb0: 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65  rn then continue
6ec0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
6ed0: 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
6ee0: 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69  f.** the corouti
6ef0: 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  ne launched by t
6f00: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
6f10: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64  ends with.** End
6f20: 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20  Coroutine, then 
6f30: 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65  jump to P2 rathe
6f40: 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e  r than continuin
6f50: 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65  g with the.** ne
6f60: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
6f70: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
6f80: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f  InitCoroutine.*/
6f90: 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20  .case OP_Yield: 
6fa0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
6fb0: 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69  in1, jump */.  i
6fc0: 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e  nt pcDest;.  pIn
6fd0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6fe0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64  1];.  assert( Vd
6ff0: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e  beMemDynamic(pIn
7000: 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  1)==0 );.  pIn1-
7010: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
7020: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
7030: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
7040: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
7050: 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52  (pOp - aOp);.  R
7060: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
7070: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
7080: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73  pOp = &aOp[pcDes
7090: 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t];.  break;.}..
70a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
70b0: 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33  IfNull  P1 P2 P3
70c0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
70d0: 69 73 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75  is:  if r[P3]=nu
70e0: 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68  ll halt.**.** Ch
70f0: 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e  eck the value in
7100: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49   register P3.  I
7110: 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65  f it is NULL the
7120: 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20  n Halt using.** 
7130: 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32  parameter P1, P2
7140: 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74  , and P4 as if t
7150: 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20  his were a Halt 
7160: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
7170: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
7180: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
7190: 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
71a0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61  his routine is a
71b0: 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50   no-op..** The P
71c0: 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75  5 parameter shou
71d0: 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65  ld be 1..*/.case
71e0: 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20   OP_HaltIfNull: 
71f0: 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f  {      /* in3 */
7200: 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
7210: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
7220: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
7230: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72  EM_Null)==0 ) br
7240: 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
7250: 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48  hrough into OP_H
7260: 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63  alt */.}../* Opc
7270: 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32  ode:  Halt P1 P2
7280: 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45   * P4 P5.**.** E
7290: 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  xit immediately.
72a0: 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f    All open curso
72b0: 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73  rs, etc are clos
72c0: 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61  ed.** automatica
72d0: 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  lly..**.** P1 is
72e0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65   the result code
72f0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
7300: 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c  ite3_exec(), sql
7310: 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a  ite3_reset(),.**
7320: 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61   or sqlite3_fina
7330: 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e  lize().  For a n
7340: 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73  ormal halt, this
7350: 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54   should be SQLIT
7360: 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72  E_OK (0)..** For
7370: 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20   errors, it can 
7380: 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61  be some other va
7390: 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74  lue.  If P1!=0 t
73a0: 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65  hen P2 will dete
73b0: 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72  rmine.** whether
73c0: 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62   or not to rollb
73d0: 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  ack the current 
73e0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f  transaction.  Do
73f0: 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a   not rollback.**
7400: 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e   if P2==OE_Fail.
7410: 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   Do the rollback
7420: 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62   if P2==OE_Rollb
7430: 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f  ack.  If P2==OE_
7440: 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62  Abort,.** then b
7450: 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e  ack out all chan
7460: 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f 63  ges that have oc
7470: 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74 68  curred during th
7480: 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  is execution of 
7490: 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74  the.** VDBE, but
74a0: 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   do not rollback
74b0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
74c0: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  . .**.** If P4 i
74d0: 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20  s not null then 
74e0: 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d  it is an error m
74f0: 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a  essage string..*
7500: 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c  *.** P5 is a val
7510: 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  ue between 0 and
7520: 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74   4, inclusive, t
7530: 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65  hat modifies the
7540: 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a   P4 string..**.*
7550: 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61  *    0:  (no cha
7560: 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e  nge).**    1:  N
7570: 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e  OT NULL contrain
7580: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7590: 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f     2:  UNIQUE co
75a0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
75b0: 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48   P4.**    3:  CH
75c0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ECK constraint f
75d0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
75e0: 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  4:  FOREIGN KEY 
75f0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7600: 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50  d: P4.**.** If P
7610: 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e  5 is not zero an
7620: 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68  d P4 is NULL, th
7630: 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61 66  en everything af
7640: 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a  ter the ":" is.*
7650: 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a  * omitted..**.**
7660: 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70   There is an imp
7670: 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20 30  lied "Halt 0 0 0
7680: 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  " instruction in
7690: 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
76a0: 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65  ry end of.** eve
76b0: 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20  ry program.  So 
76c0: 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20  a jump past the 
76d0: 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  last instruction
76e0: 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a   of the program.
76f0: 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ** is the same a
7700: 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74  s executing Halt
7710: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
7720: 74 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t: {.  const cha
7730: 72 20 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73  r *zType;.  cons
7740: 74 20 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b  t char *zLogFmt;
7750: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
7760: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
7770: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
7780: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66  pOp - aOp);.  if
7790: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
77a0: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
77b0: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
77c0: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
77d0: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
77e0: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
77f0: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72  rame. */.    pFr
7800: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
7810: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
7820: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
7830: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
7840: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
7850: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
7860: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
7870: 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56    pcx = sqlite3V
7880: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
7890: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
78a0: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
78b0: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
78c0: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
78d0: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
78e0: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
78f0: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7900: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7910: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7920: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7930: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7940: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7950: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7960: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7970: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7980: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7990: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
79a0: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
79b0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
79c0: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
79d0: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
79e0: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
79f0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7a00: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7a10: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7a20: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7a30: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7a40: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7a50: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7a60: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7a70: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7a80: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7a90: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7aa0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7ab0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7ac0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7ad0: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 69 66  ->pc = pcx;.  if
7ae0: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
7af0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
7b00: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
7b10: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
7b20: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
7b30: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
7b40: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b70: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
7b80: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73  KEY" };.      as
7b90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31  sert( pOp->p5>=1
7ba0: 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29   && pOp->p5<=4 )
7bb0: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7bc0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  ( pOp->p5==1 );.
7bd0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7be0: 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20  pOp->p5==2 );.  
7bf0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7c00: 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20  p->p5==3 );.    
7c10: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7c20: 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20  >p5==4 );.      
7c30: 7a 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70  zType = azType[p
7c40: 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d  Op->p5-1];.    }
7c50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70  else{.      zTyp
7c60: 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  e = 0;.    }.   
7c70: 20 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d   assert( zType!=
7c80: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  0 || pOp->p4.z!=
7c90: 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74  0 );.    zLogFmt
7ca0: 20 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20   = "abort at %d 
7cb0: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20  in [%s]: %s";.  
7cc0: 20 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70    if( zType && p
7cd0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
7ce0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
7cf0: 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72  or(p, "%s constr
7d00: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22  aint failed: %s"
7d10: 2c 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e 70 34  , zType, pOp->p4
7d20: 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  .z);.    }else i
7d30: 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  f( pOp->p4.z ){.
7d40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7d50: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
7d60: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7d70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
7d80: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
7d90: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7da0: 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b  failed", zType);
7db0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
7dc0: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
7dd0: 7a 4c 6f 67 46 6d 74 2c 20 70 63 78 2c 20 70 2d  zLogFmt, pcx, p-
7de0: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
7df0: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
7e00: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
7e10: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
7e20: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
7e30: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7e40: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7e50: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7e60: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7e70: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7e80: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7e90: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7ea0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7eb0: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
7ec0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7ed0: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7ee0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7ef0: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7f00: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
7f10: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
7f20: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
7f30: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7f40: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7f50: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7f60: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
7f70: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
7f80: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
7f90: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
7fa0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7fb0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7fc0: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
7fd0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7fe0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7ff0: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
8000: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
8010: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8020: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
8030: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
8040: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8050: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
8060: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8070: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
8080: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
8090: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
80a0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
80b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
80c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
80d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
80e0: 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20  _Int64: {       
80f0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
8100: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8110: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8120: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8130: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
8140: 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d  Out->u.i = *pOp-
8150: 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
8160: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
8170: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
8180: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
8190: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
81a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
81b0: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
81c0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
81d0: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   to a 64-bit flo
81e0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
81f0: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
8200: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
8210: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8220: 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20   OP_Real: {     
8230: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8240: 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32  s TK_FLOAT, out2
8250: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
8260: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8270: 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
8280: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
8290: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
82a0: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
82b0: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
82c0: 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.r = *pOp->p4
82d0: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
82e0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
82f0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
8300: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8310: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8320: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
8330: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
8340: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
8350: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
8360: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
8370: 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67  ** into a String
8380: 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69   opcode before i
8390: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
83a0: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
83b0: 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69  .  During.** thi
83c0: 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  s transformation
83d0: 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  , the length of 
83e0: 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d  string P4 is com
83f0: 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  puted and stored
8400: 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61  .** as the P1 pa
8410: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65  rameter..*/.case
8420: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
8430: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8440: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
8450: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
8460: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
8470: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8480: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8490: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
84a0: 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70  OP_String;.  pOp
84b0: 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74  ->p1 = sqlite3St
84c0: 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a  rlen30(pOp->p4.z
84d0: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
84e0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
84f0: 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51  if( encoding!=SQ
8500: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
8510: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
8520: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
8530: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
8540: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
8550: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8560: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
8570: 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20 74 6f  TOOBIG ) goto to
8580: 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20 53  o_big;.    if( S
8590: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
85a0: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
85b0: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
85c0: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
85d0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
85e0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
85f0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
8600: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
8610: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
8620: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8630: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
8640: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8650: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8660: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8670: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8680: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8690: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
86a0: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
86b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
86c0: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
86d0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
86e0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
86f0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8700: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
8710: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
8720: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
8730: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
8740: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
8750: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
8760: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
8770: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
8780: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
8790: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
87a0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
87b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
87c0: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
87d0: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
87e0: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
87f0: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
8800: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
8810: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
8820: 66 20 50 35 21 3d 30 20 61 6e 64 20 74 68 65 20  f P5!=0 and the 
8830: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
8840: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
8850: 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
8860: 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70  n.** the datatyp
8870: 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65  e of the registe
8880: 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65  r P2 is converte
8890: 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20  d to BLOB.  The 
88a0: 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68  content is.** th
88b0: 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20  e same sequence 
88c0: 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20  of bytes, it is 
88d0: 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74  merely interpret
88e0: 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73  ed as a BLOB ins
88f0: 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72  tead.** of a str
8900: 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61  ing, as if it ha
8910: 64 20 62 65 65 6e 20 43 41 53 54 2e 0a 2a 2f 0a  d been CAST..*/.
8920: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
8930: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
8940: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
8950: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
8960: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8970: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8980: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8990: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
89a0: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
89b0: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
89c0: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
89d0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
89e0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
89f0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8a00: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
8a10: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
8a20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
8a30: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73 73  >p3>0 );.    ass
8a40: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
8a50: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
8a60: 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d  r) );.    pIn3 =
8a70: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
8a80: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
8a90: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
8aa0: 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  nt );.    if( pI
8ab0: 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d 3e  n3->u.i ) pOut->
8ac0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
8ad0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8ae0: 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Term;.  }.  brea
8af0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8b00: 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a   Null P1 P2 P3 *
8b10: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8b20: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
8b30: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
8b40: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8b50: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
8b60: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
8b70: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
8b80: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8b90: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
8ba0: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
8bb0: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
8bc0: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
8bd0: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
8be0: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
8bf0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
8c00: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
8c10: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
8c20: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
8c30: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
8c40: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
8c50: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
8c60: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
8c70: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
8c80: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
8c90: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
8ca0: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
8cb0: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
8cc0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
8cd0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8ce0: 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63   out2 */.  int c
8cf0: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
8d00: 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  ag;.  pOut = out
8d10: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8d20: 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  Op);.  cnt = pOp
8d30: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
8d40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
8d50: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
8d60: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
8d70: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
8d80: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
8d90: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
8da0: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
8db0: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
8dc0: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
8dd0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
8de0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
8df0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
8e00: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
8e10: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
8e20: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63   nullFlag;.    c
8e30: 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  nt--;.  }.  brea
8e40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8e50: 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a   SoftNull P1 * *
8e60: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8e70: 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a  :  r[P1]=NULL.**
8e80: 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72  .** Set register
8e90: 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20   P1 to have the 
8ea0: 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65  value NULL as se
8eb0: 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b  en by the OP_Mak
8ec0: 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72  eRecord.** instr
8ed0: 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e  uction, but do n
8ee0: 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69  ot free any stri
8ef0: 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72  ng or blob memor
8f00: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
8f10: 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65  h.** the registe
8f20: 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68  r, so that if th
8f30: 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74  e value was a st
8f40: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61  ring or blob tha
8f50: 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  t was.** previou
8f60: 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67  sly copied using
8f70: 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63   OP_SCopy, the c
8f80: 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69  opies will conti
8f90: 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e  nue to be valid.
8fa0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74  .*/.case OP_Soft
8fb0: 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74  Null: {.  assert
8fc0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
8fd0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
8fe0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
8ff0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9000: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d  Op->p1];.  pOut-
9010: 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e  >flags = (pOut->
9020: 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26  flags|MEM_Null)&
9030: 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a  ~MEM_Undefined;.
9040: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9050: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
9060: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
9070: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28  psis: r[P2]=P4 (
9080: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34  len=P1).**.** P4
9090: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f   points to a blo
90a0: 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74  b of data P1 byt
90b0: 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20  es long.  Store 
90c0: 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20  this.** blob in 
90d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
90e0: 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20  case OP_Blob: { 
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9100: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
9110: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
9120: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
9130: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
9140: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9150: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
9160: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
9170: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
9180: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
9190: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
91a0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
91b0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
91c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
91d0: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
91e0: 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
91f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9200: 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50  ]=parameter(P1,P
9210: 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  4).**.** Transfe
9220: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
9230: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20  bound parameter 
9240: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
9250: 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
9260: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61   parameter is na
9270: 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61  med, then its na
9280: 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34  me appears in P4
9290: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
92a0: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
92b0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
92c0: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
92d0: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
92e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
92f0: 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a   out2 */.  Mem *
9300: 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56  pVar;       /* V
9310: 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73  alue being trans
9320: 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73  ferred */..  ass
9330: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
9340: 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56  & pOp->p1<=p->nV
9350: 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ar );.  assert( 
9360: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
9370: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a  pOp->p4.z==p->az
9380: 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29  Var[pOp->p1-1] )
9390: 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61  ;.  pVar = &p->a
93a0: 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  Var[pOp->p1 - 1]
93b0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
93c0: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61  dbeMemTooBig(pVa
93d0: 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  r) ){.    goto t
93e0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f  oo_big;.  }.  pO
93f0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9400: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9410: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9420: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9430: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
9440: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9450: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9460: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9470: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9480: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9490: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
94a0: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
94b0: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
94c0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
94d0: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
94e0: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
94f0: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
9500: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
9510: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
9520: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
9530: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
9540: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
9550: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9560: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9570: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9580: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9590: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
95a0: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
95b0: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
95c0: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
95d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
95e0: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
95f0: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
9600: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
9610: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
9620: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
9630: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9640: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
9650: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9660: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9670: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9680: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9690: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
96a0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
96b0: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
96c0: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
96d0: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
96e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
96f0: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
9700: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
9710: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
9720: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
9730: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
9740: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
9750: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9760: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9770: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9780: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9790: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
97a0: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
97b0: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
97c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
97d0: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
97e0: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
97f0: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
9800: 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a  opyFrom<pOut ){.
9810: 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f        pOut->pSco
9820: 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70  pyFrom += pOp->p
9830: 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65  2 - p1;.    }.#e
9840: 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d  ndif.    Deephem
9850: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20  eralize(pOut);. 
9860: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
9870: 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20  E(p2++, pOut);. 
9880: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70     pIn1++;.    p
9890: 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28  Out++;.  }while(
98a0: 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b   --n );.  break;
98b0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
98c0: 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  opy P1 P2 P3 * *
98d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
98e0: 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33  P2@P3+1]=r[P1@P3
98f0: 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61  +1].**.** Make a
9900: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
9910: 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74  rs P1..P1+P3 int
9920: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  o registers P2..
9930: 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  P2+P3..**.** Thi
9940: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
9950: 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20  kes a deep copy 
9960: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41  of the value.  A
9970: 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73   duplicate.** is
9980: 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72   made of any str
9990: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73  ing or blob cons
99a0: 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20  tant.  See also 
99b0: 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73  OP_SCopy..*/.cas
99c0: 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69  e OP_Copy: {.  i
99d0: 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  nt n;..  n = pOp
99e0: 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26  ->p3;.  pIn1 = &
99f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
9a00: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9a10: 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
9a20: 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a  ( pOut!=pIn1 );.
9a30: 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20    while( 1 ){.  
9a40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9a50: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
9a60: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
9a70: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
9a80: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
9a90: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
9aa0: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
9ab0: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
9ac0: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
9ad0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
9ae0: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
9af0: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
9b00: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
9b10: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
9b20: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
9b30: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
9b40: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
9b50: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9b60: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
9b70: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
9b80: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
9b90: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9ba0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
9bb0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
9bc0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
9bd0: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
9be0: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
9bf0: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
9c00: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
9c10: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
9c20: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
9c30: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
9c40: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
9c50: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
9c60: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
9c70: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
9c80: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
9c90: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
9ca0: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
9cb0: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
9cc0: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
9cd0: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
9ce0: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
9cf0: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
9d00: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
9d10: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
9d20: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
9d30: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
9d40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
9d50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
9d60: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
9d70: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9d80: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9d90: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
9da0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
9db0: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
9dc0: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9dd0: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
9de0: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
9df0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
9e00: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
9e10: 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53  om==0 ) pOut->pS
9e20: 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b  copyFrom = pIn1;
9e30: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
9e40: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
9e50: 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a  esultRow P1 P2 *
9e60: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9e70: 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31 40 50  :  output=r[P1@P
9e80: 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  2].**.** The reg
9e90: 69 73 74 65 72 73 20 50 31 20 74 68 72 6f 75 67  isters P1 throug
9ea0: 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69  h P1+P2-1 contai
9eb0: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  n a single row o
9ec0: 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20 54 68  f.** results. Th
9ed0: 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
9ee0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   the sqlite3_ste
9ef0: 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d  p() call to term
9f00: 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e  inate.** with an
9f10: 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65 74 75   SQLITE_ROW retu
9f20: 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74 20 73  rn code and it s
9f30: 65 74 73 20 75 70 20 74 68 65 20 73 71 6c 69 74  ets up the sqlit
9f40: 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63  e3_stmt.** struc
9f50: 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64 65 20  ture to provide 
9f60: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 72 28  access to the r(
9f70: 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20  P1)..r(P1+P2-1) 
9f80: 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74 68 65  values as.** the
9f90: 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a   result row..*/.
9fa0: 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f  case OP_ResultRo
9fb0: 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  w: {.  Mem *pMem
9fc0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 73 73  ;.  int i;.  ass
9fd0: 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75  ert( p->nResColu
9fe0: 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  mn==pOp->p2 );. 
9ff0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a000: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
a010: 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c  pOp->p1+pOp->p2<
a020: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
a030: 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e  rsor)+1 );..#ifn
a040: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a050: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
a060: 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70  K.  /* Run the p
a070: 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20  rogress counter 
a080: 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74 75  just before retu
a090: 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66  rning..  */.  if
a0a0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
a0b0: 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70  =0.   && nVmStep
a0c0: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
a0d0: 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67  .   && db->xProg
a0e0: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
a0f0: 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20  ssArg)!=0.  ){. 
a100: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
a110: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f  NTERRUPT;.    go
a120: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
a130: 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  lt;.  }.#endif..
a140: 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61    /* If this sta
a150: 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61  tement has viola
a160: 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  ted immediate fo
a170: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
a180: 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e  aints, do.  ** n
a190: 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ot return the nu
a1a0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64  mber of rows mod
a1b0: 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f  ified. And do no
a1c0: 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74  t RELEASE the st
a1d0: 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61  atement.  ** tra
a1e0: 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65  nsaction. It nee
a1f0: 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
a200: 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20  back.  */.  if( 
a210: 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d  SQLITE_OK!=(rc =
a220: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
a230: 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20  kFk(p, 0)) ){.  
a240: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c    assert( db->fl
a250: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
a260: 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65  Rows );.    asse
a270: 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a  rt( p->usesStmtJ
a280: 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 62 72  ournal );.    br
a290: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  eak;.  }..  /* I
a2a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
a2b0: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
a2c0: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
a2d0: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
a2e0: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
a2f0: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
a300: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
a310: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a320: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
a330: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
a340: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
a350: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
a360: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
a370: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a380: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
a390: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
a3a0: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
a3b0: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
a3c0: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
a3d0: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
a3e0: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
a3f0: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
a400: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
a410: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
a420: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
a430: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
a440: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
a450: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
a460: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
a470: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
a480: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
a490: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
a4a0: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
a4b0: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
a4c0: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
a4d0: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
a4e0: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
a4f0: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
a500: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
a510: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
a520: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
a530: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a540: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
a550: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
a560: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
a570: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
a580: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
a590: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
a5a0: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
a5b0: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
a5c0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
a5d0: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
a5e0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a5f0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a600: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
a610: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
a620: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
a630: 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e 45 56  EASE);.  if( NEV
a640: 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
a650: 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ) ){.    break;.
a660: 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69    }..  /* Invali
a670: 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72  date all ephemer
a680: 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61  al cursor row ca
a690: 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63  ches */.  p->cac
a6a0: 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68  heCtr = (p->cach
a6b0: 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20  eCtr + 2)|1;..  
a6c0: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
a6d0: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
a6e0: 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20  current row are 
a6f0: 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a  \000 terminated.
a700: 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e    ** and have an
a710: 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20   assigned type. 
a720: 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   The results are
a730: 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65   de-ephemeralize
a740: 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65  d as.  ** a side
a750: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
a760: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
a770: 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  tSet = &aMem[pOp
a780: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
a790: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
a7a0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
a7b0: 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b  emIsValid(&pMem[
a7c0: 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68  i]) );.    Deeph
a7d0: 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b  emeralize(&pMem[
a7e0: 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  i]);.    assert(
a7f0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
a800: 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a  & MEM_Ephem)==0.
a810: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
a820: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
a830: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
a840: 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  b))==0 );.    sq
a850: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
a860: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
a870: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
a880: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69  _TRACE(pOp->p1+i
a890: 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d  , &pMem[i]);.  }
a8a0: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
a8b0: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
a8c0: 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74  o_mem;..  /* Ret
a8d0: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
a8e0: 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69   */.  p->pc = (i
a8f0: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b  nt)(pOp - aOp) +
a900: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
a910: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
a920: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
a930: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
a940: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a950: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
a960: 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]+r[P1].**.*
a970: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
a980: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
a990: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
a9a0: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
a9b0: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
a9c0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
a9d0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
a9e0: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
a9f0: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
aa00: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
aa10: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
aa20: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
aa30: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
aa40: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
aa50: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
aa60: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
aa70: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
aa80: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
aa90: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
aaa0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
aab0: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
aac0: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
aad0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
aae0: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
aaf0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
ab00: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
ab10: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
ab20: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
ab30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ab40: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
ab50: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
ab60: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
ab70: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
ab80: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
ab90: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
aba0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
abb0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
abc0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
abd0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
abe0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
abf0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
ac00: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
ac10: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
ac20: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
ac30: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
ac40: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
ac50: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
ac60: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
ac70: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
ac80: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
ac90: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
aca0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
acb0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
acc0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
acd0: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
ace0: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
acf0: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
ad00: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
ad10: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ad20: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
ad30: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
ad40: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
ad50: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
ad60: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
ad70: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
ad80: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
ad90: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
ada0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d   pOut->z[nByte]=
adb0: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
adc0: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
add0: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
ade0: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
adf0: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
ae00: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
ae10: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
ae20: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
ae30: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
ae40: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
ae50: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
ae60: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
ae70: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
ae80: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
ae90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
aea0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
aeb0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
aec0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
aed0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
aee0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
aef0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
af00: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
af10: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
af20: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
af30: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
af40: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  s:  r[P3]=r[P1]*
af50: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
af60: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
af70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
af80: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
af90: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
afa0: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
afb0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
afc0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
afd0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
afe0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
aff0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b000: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
b010: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b020: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b030: 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  2]-r[P1].**.** S
b040: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
b050: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b060: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
b070: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b080: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b090: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b0a0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b0b0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b0c0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b0d0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b0e0: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
b0f0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b100: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b110: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
b120: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
b130: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
b140: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
b150: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b160: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b170: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b180: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
b190: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
b1a0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
b1b0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
b1c0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
b1d0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b1e0: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
b1f0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b200: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
b210: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
b220: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b230: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  s:  r[P3]=r[P2]%
b240: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
b250: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
b260: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
b270: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
b280: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
b290: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
b2a0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b2b0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
b2c0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b2d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b2e0: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
b2f0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
b300: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b310: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b320: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b330: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b350: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
b360: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
b370: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
b380: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
b390: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b3a0: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
b3b0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b3c0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
b3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b3e0: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
b3f0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b400: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b420: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
b430: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
b440: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
b450: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
b460: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b470: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
b480: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
b490: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
b4a0: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
b4b0: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
b4c0: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
b4d0: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
b4e0: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
b4f0: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
b500: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
b510: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
b520: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
b530: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
b540: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
b550: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
b560: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
b570: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
b580: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
b590: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
b5a0: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
b5b0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
b5c0: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
b5d0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
b5e0: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
b5f0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
b600: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
b610: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
b620: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
b630: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b640: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
b650: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
b660: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
b670: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
b680: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
b690: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
b6a0: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
b6b0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b6c0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
b6d0: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
b6e0: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
b6f0: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
b700: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
b710: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
b720: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
b730: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
b740: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
b750: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
b760: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
b770: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
b780: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
b790: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
b7a0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
b7b0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
b7c0: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
b7d0: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
b7e0: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
b7f0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
b800: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
b810: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
b820: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
b830: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
b840: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
b850: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
b860: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
b870: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
b880: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
b890: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
b8a0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
b8b0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
b8c0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
b8d0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
b8e0: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
b8f0: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
b900: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
b910: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
b920: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b930: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
b940: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
b950: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
b960: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b970: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b980: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b990: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
b9a0: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
b9b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b9c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
b9d0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
b9e0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b9f0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
ba00: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
ba10: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
ba20: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
ba30: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
ba40: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
ba50: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
ba60: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
ba70: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
ba80: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
ba90: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
baa0: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
bab0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
bac0: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
bad0: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
bae0: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
baf0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
bb00: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
bb10: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
bb20: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
bb30: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
bb40: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
bb50: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
bb60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
bb70: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
bb80: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
bb90: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
bba0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bbb0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
bbc0: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
bbd0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
bbe0: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
bbf0: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
bc00: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
bc10: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
bc20: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
bc30: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bc40: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bc50: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bc60: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
bc70: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
bc80: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
bc90: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bca0: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
bcb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
bcc0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
bcd0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
bce0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bcf0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
bd00: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
bd10: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
bd20: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
bd30: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bd40: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
bd50: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
bd60: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
bd70: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bd80: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
bd90: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
bda0: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
bdb0: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
bdc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
bdd0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
bde0: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
bdf0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
be00: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
be10: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
be20: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
be30: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
be40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
be50: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
be60: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
be70: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
be80: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
be90: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
bea0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
beb0: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
bec0: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
bed0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
bee0: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
bef0: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
bf00: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
bf10: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
bf20: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
bf30: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
bf40: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
bf50: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
bf60: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
bf70: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
bf80: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
bf90: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
bfa0: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
bfb0: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
bfc0: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
bfd0: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
bfe0: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
bff0: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c000: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c010: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c020: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c030: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c040: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c050: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c060: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c070: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c080: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c090: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c0a0: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c0b0: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c0c0: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c0d0: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c0e0: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c0f0: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c100: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c110: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c120: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c130: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c140: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c150: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c160: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c170: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c180: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c190: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
c1a0: 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20 50 33  nction0 P1 P2 P3
c1b0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c1c0: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c1d0: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c1e0: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c1f0: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c200: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
c210: 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  Def object that.
c220: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
c230: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
c240: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
c250: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
c260: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
c270: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
c280: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c290: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
c2a0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
c2b0: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c2c0: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c2d0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c2e0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c2f0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c300: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c310: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c320: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c330: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c340: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
c350: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
c360: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
c370: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
c380: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
c390: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
c3a0: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
c3b0: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
c3c0: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
c3d0: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
c3e0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
c3f0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
c400: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
c410: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
c420: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
c430: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
c440: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
c450: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
c460: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
c470: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63  * See also: Func
c480: 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c 20 41  tion, AggStep, A
c490: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70  ggFinal.*/./* Op
c4a0: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
c4b0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c4c0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
c4d0: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
c4e0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
c4f0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
c500: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
c510: 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
c520: 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  ext object that.
c530: 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  ** contains a po
c540: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e  inter to the fun
c550: 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29  ction to be run)
c560: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
c570: 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d  ts taken.** from
c580: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
c590: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
c5a0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
c5b0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
c5c0: 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ed.** in registe
c5d0: 72 20 50 33 2e 20 20 52 65 67 69 73 74 65 72 20  r P3.  Register 
c5e0: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
c5f0: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
c600: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
c610: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
c620: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
c630: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
c640: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
c650: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
c660: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
c670: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
c680: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
c690: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
c6a0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
c6b0: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
c6c0: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
c6d0: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
c6e0: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
c6f0: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
c700: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
c710: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c720: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
c730: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
c740: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
c750: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
c760: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
c770: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
c780: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
c790: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66  ode..**.** SQL f
c7a0: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 69  unctions are ini
c7b0: 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
c7c0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77 69 74  OP_Function0 wit
c7d0: 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  h P4 pointing.**
c7e0: 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62   to a FuncDef ob
c7f0: 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20 66 69  ject.  But on fi
c800: 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20  rst evaluation, 
c810: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 20 69  the P4 operand i
c820: 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  s.** automatical
c830: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  ly converted int
c840: 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
c850: 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  text object and 
c860: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a  the operation.**
c870: 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68 69 73   changed to this
c880: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63   OP_Function opc
c890: 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ode.  In this wa
c8a0: 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
c8b0: 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
c8c0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
c8d0: 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20 6f 6e  object occurs on
c8e0: 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65 72 20  ly once, rather 
c8f0: 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61  than once for ea
c900: 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e  ch.** evaluation
c910: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c920: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
c930: 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67  : Function0, Agg
c940: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
c950: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
c960: 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  on0: {.  int n;.
c970: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
c980: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
c990: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c9a0: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
c9b0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
c9c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
c9d0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
c9e0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
c9f0: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
ca00: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
ca10: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
ca20: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
ca30: 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
ca40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
ca50: 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
ca60: 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
ca70: 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44   pCtx = sqlite3D
ca80: 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73  bMallocRaw(db, s
ca90: 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28  izeof(*pCtx) + (
caa0: 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69  n-1)*sizeof(sqli
cab0: 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20  te3_value*));.  
cac0: 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f  if( pCtx==0 ) go
cad0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74  to no_mem;.  pCt
cae0: 78 2d 3e 70 4f 75 74 20 3d 20 30 3b 0a 20 20 70  x->pOut = 0;.  p
caf0: 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70  Ctx->pFunc = pOp
cb00: 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43  ->p4.pFunc;.  pC
cb10: 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28  tx->iOp = (int)(
cb20: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43  pOp - aOp);.  pC
cb30: 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20  tx->pVdbe = p;. 
cb40: 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b   pCtx->argc = n;
cb50: 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d  .  pOp->p4type =
cb60: 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70   P4_FUNCCTX;.  p
cb70: 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43  Op->p4.pCtx = pC
cb80: 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  tx;.  pOp->opcod
cb90: 65 20 3d 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3b  e = OP_Function;
cba0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
cbb0: 67 68 20 69 6e 74 6f 20 4f 50 5f 46 75 6e 63 74  gh into OP_Funct
cbc0: 69 6f 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  ion */.}.case OP
cbd0: 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20 69  _Function: {.  i
cbe0: 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt i;.  sqlite3_
cbf0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a  context *pCtx;..
cc00: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
cc10: 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54  4type==P4_FUNCCT
cc20: 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f  X );.  pCtx = pO
cc30: 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 0a 20 20 2f  p->p4.pCtx;..  /
cc40: 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69  * If this functi
cc50: 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20  on is inside of 
cc60: 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72  a trigger, the r
cc70: 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e  egister array in
cc80: 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67   aMem[].  ** mig
cc90: 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  ht change from o
cca0: 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f  ne evaluation to
ccb0: 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20   the next.  The 
ccc0: 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  next block of co
ccd0: 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74  de.  ** checks t
cce0: 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67  o see if the reg
ccf0: 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20  ister array has 
cd00: 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20  changed, and if 
cd10: 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69  so it.  ** reini
cd20: 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c  tializes the rel
cd30: 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74  avant parts of t
cd40: 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
cd50: 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70  xt object */.  p
cd60: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
cd70: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 74 78  >p3];.  if( pCtx
cd80: 2d 3e 70 4f 75 74 20 21 3d 20 70 4f 75 74 20 29  ->pOut != pOut )
cd90: 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f 75 74  {.    pCtx->pOut
cda0: 20 3d 20 70 4f 75 74 3b 0a 20 20 20 20 66 6f 72   = pOut;.    for
cdb0: 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b  (i=pCtx->argc-1;
cdc0: 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78   i>=0; i--) pCtx
cdd0: 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65  ->argv[i] = &aMe
cde0: 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20  m[pOp->p2+i];.  
cdf0: 7d 0a 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  }..  memAboutToC
ce00: 68 61 6e 67 65 28 70 2c 20 70 43 74 78 2d 3e 70  hange(p, pCtx->p
ce10: 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Out);.#ifdef SQL
ce20: 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
ce30: 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67  i=0; i<pCtx->arg
ce40: 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  c; i++){.    ass
ce50: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
ce60: 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29  pCtx->argv[i]) )
ce70: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
ce80: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
ce90: 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a  pCtx->argv[i]);.
cea0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d    }.#endif.  Mem
ceb0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 43 74 78  SetTypeFlag(pCtx
cec0: 2d 3e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  ->pOut, MEM_Null
ced0: 29 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f  );.  pCtx->fErro
cee0: 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 64 62  rOrAux = 0;.  db
cef0: 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
cf00: 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 70 43 74  stRowid;.  (*pCt
cf10: 78 2d 3e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  x->pFunc->xFunc)
cf20: 28 70 43 74 78 2c 20 70 43 74 78 2d 3e 61 72 67  (pCtx, pCtx->arg
cf30: 63 2c 20 70 43 74 78 2d 3e 61 72 67 76 29 3b 20  c, pCtx->argv); 
cf40: 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
cf50: 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52  23230 */.  lastR
cf60: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
cf70: 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65 6d 62  owid;  /* Rememb
cf80: 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67 65 73  er rowid changes
cf90: 20 6d 61 64 65 20 62 79 20 78 46 75 6e 63 20 2a   made by xFunc *
cfa0: 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66  /..  /* If the f
cfb0: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64  unction returned
cfc0: 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77   an error, throw
cfd0: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f   an exception */
cfe0: 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72  .  if( pCtx->fEr
cff0: 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
d000: 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
d010: 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
d020: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
d030: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
d040: 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e 70 4f  ue_text(pCtx->pO
d050: 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ut));.      rc =
d060: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
d070: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
d080: 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61  3VdbeDeleteAuxDa
d090: 74 61 28 70 2c 20 70 43 74 78 2d 3e 69 4f 70 2c  ta(p, pCtx->iOp,
d0a0: 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a   pOp->p1);.  }..
d0b0: 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
d0c0: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
d0d0: 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tion into regist
d0e0: 65 72 20 50 33 20 2a 2f 0a 20 20 69 66 28 20 70  er P3 */.  if( p
d0f0: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Out->flags & (ME
d100: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20  M_Str|MEM_Blob) 
d110: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d120: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
d130: 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63  (pCtx->pOut, enc
d140: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20  oding);.    if( 
d150: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
d160: 6f 42 69 67 28 70 43 74 78 2d 3e 70 4f 75 74 29  oBig(pCtx->pOut)
d170: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
d180: 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52  .  }..  REGISTER
d190: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
d1a0: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55  pCtx->pOut);.  U
d1b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
d1c0: 5a 45 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  ZE(pCtx->pOut);.
d1d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d1e0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
d1f0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d200: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
d210: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
d220: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d230: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
d240: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
d250: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
d260: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
d270: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
d280: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
d290: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
d2a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
d2b0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
d2c0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
d2d0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d2e0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
d2f0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d300: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
d310: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
d320: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
d330: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
d340: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
d350: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
d360: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
d370: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
d380: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
d390: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
d3a0: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
d3b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
d3c0: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
d3d0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
d3e0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
d3f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
d400: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
d410: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
d420: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
d430: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
d440: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
d450: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d460: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d470: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d480: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d490: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d4a0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
d4b0: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
d4c0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
d4d0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
d4e0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
d4f0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
d500: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
d510: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
d520: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
d530: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
d540: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
d550: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
d560: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
d570: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d580: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d590: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d5a0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d5b0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
d5c0: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
d5d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d5e0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
d5f0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d600: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d620: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d630: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
d640: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
d650: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
d660: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d670: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
d680: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
d690: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
d6a0: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
d6b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
d6c0: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
d6d0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
d6e0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
d6f0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
d700: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d710: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
d720: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d730: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
d740: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
d750: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
d760: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
d770: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
d780: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
d790: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
d7a0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
d7b0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
d7c0: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
d7d0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
d7e0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
d7f0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
d800: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
d810: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
d820: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
d830: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
d840: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
d850: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
d860: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
d870: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
d880: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
d890: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
d8a0: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
d8b0: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
d8c0: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
d8d0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
d8e0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
d8f0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
d900: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
d910: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
d920: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
d930: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
d940: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
d950: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
d960: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
d970: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
d980: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
d990: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
d9a0: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
d9b0: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
d9c0: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
d9d0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
d9e0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
d9f0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
da00: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
da10: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
da20: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
da30: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
da40: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
da50: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
da60: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
da70: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
da80: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
da90: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
daa0: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
dab0: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
dac0: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
dad0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
dae0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
daf0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
db00: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
db10: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
db20: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
db30: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
db40: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
db50: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
db60: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
db70: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
db80: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
db90: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
dba0: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
dbb0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
dbc0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
dbd0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
dbe0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
dbf0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
dc00: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
dc10: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
dc20: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
dc30: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
dc40: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
dc50: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
dc60: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
dc70: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
dc80: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
dc90: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
dca0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
dcb0: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
dcc0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
dcd0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
dce0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
dcf0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
dd00: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
dd10: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
dd20: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
dd30: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
dd40: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
dd50: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
dd60: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
dd70: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
dd80: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
dd90: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
dda0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
ddb0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
ddc0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
ddd0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
dde0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
ddf0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
de00: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
de10: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
de20: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
de30: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
de40: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
de50: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
de60: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
de70: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
de80: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
de90: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
dea0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
deb0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
dec0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
ded0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
dee0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
def0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
df00: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
df10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
df20: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
df30: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
df40: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
df50: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
df60: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
df70: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
df80: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
df90: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
dfa0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
dfb0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
dfc0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
dfd0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
dfe0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
dff0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
e000: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
e010: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
e020: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
e030: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
e040: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
e050: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
e060: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
e070: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
e080: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
e090: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
e0a0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
e0b0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
e0c0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
e0d0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
e0e0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
e0f0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
e100: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
e110: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
e120: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e130: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
e140: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e150: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
e160: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
e170: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
e180: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
e190: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e1a0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
e1b0: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
e1c0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
e1d0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
e1e0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
e1f0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e200: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
e210: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
e220: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
e230: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
e240: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
e250: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
e260: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
e270: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
e280: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
e290: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
e2a0: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
e2b0: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
e2c0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
e2d0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
e2e0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
e2f0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
e300: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
e310: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e320: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e330: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
e340: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
e350: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
e360: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e370: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e380: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e390: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
e3a0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e3b0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a  ITE_AFF_BLOB );.
e3c0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e3d0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e3e0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
e3f0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e400: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
e410: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
e420: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e430: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
e440: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e450: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
e460: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
e470: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
e480: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
e490: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
e4a0: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
e4b0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
e4c0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
e4d0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
e4e0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
e4f0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
e500: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
e510: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e520: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e530: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
e540: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
e550: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
e560: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
e570: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
e580: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e590: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e5a0: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
e5b0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
e5c0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
e5d0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
e5e0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
e5f0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
e600: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
e610: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
e620: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
e630: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
e640: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
e650: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e660: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
e670: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
e680: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
e690: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
e6a0: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
e6b0: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
e6c0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
e6d0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
e6e0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
e6f0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
e700: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
e710: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
e720: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
e730: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
e740: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
e750: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
e760: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
e770: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
e780: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
e790: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
e7a0: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
e7b0: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
e7c0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
e7d0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e7e0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
e7f0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
e800: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
e810: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
e820: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
e830: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
e840: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
e850: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
e860: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
e870: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
e880: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
e890: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
e8a0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
e8b0: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
e8c0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
e8d0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
e8e0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
e8f0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
e900: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
e910: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e920: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e930: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e940: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e950: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e960: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e970: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e980: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e990: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e9a0: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e9b0: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e9c0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e9d0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e9e0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e9f0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
ea00: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
ea10: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
ea20: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
ea30: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
ea40: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
ea50: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
ea60: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
ea70: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
ea80: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
ea90: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
eaa0: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
eab0: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
eac0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
ead0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
eae0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
eaf0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
eb00: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
eb10: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
eb20: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
eb30: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
eb40: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
eb50: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
eb60: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
eb70: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
eb80: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
eb90: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
eba0: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
ebb0: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
ebc0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
ebd0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
ebe0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
ebf0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
ec00: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
ec10: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
ec20: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
ec30: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
ec40: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
ec50: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
ec60: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
ec70: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
ec80: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ec90: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
eca0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ecb0: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
ecc0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
ecd0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
ece0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
ecf0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
ed00: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
ed10: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
ed20: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
ed30: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
ed40: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ed50: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
ed60: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
ed70: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
ed80: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
ed90: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
eda0: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
edb0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
edc0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
edd0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
ede0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
edf0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
ee00: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
ee10: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
ee20: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
ee30: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ee40: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
ee50: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
ee60: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
ee70: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
ee80: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
ee90: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
eea0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
eeb0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
eec0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
eed0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
eee0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
eef0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ef00: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
ef10: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
ef20: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
ef30: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
ef40: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
ef50: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
ef60: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
ef70: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
ef80: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
ef90: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
efa0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
efb0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
efc0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
efd0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
efe0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
eff0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
f000: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
f010: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
f020: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
f030: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
f040: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
f050: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
f060: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
f070: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
f080: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f090: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
f0a0: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
f0b0: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
f0c0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
f0d0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
f0e0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
f0f0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
f100: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
f110: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
f120: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
f130: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
f140: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f150: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f160: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f170: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f180: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
f190: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
f1a0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f1b0: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
f1c0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
f1d0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f1e0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f1f0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f200: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f210: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
f220: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
f230: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
f240: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f250: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f260: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f270: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f280: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f290: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
f2a0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f2b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
f2c0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
f2d0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
f2e0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
f2f0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
f300: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
f310: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
f320: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
f330: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
f340: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
f350: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f360: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f370: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f380: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f390: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f3a0: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
f3b0: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
f3c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f3d0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
f3e0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
f3f0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
f400: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
f410: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
f420: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
f430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f440: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
f450: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f460: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f480: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
f490: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f4a0: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
f4b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f4c0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
f4d0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
f4e0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
f4f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f500: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
f510: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
f520: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
f530: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
f540: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
f550: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
f560: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
f570: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
f580: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
f590: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
f5a0: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
f5b0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
f5c0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
f5d0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
f5e0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
f5f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f600: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f610: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
f620: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
f630: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
f640: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
f650: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
f660: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
f670: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
f680: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
f690: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
f6a0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
f6b0: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
f6c0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
f6d0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
f6e0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
f6f0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
f700: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
f710: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
f720: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
f730: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
f740: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
f750: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
f760: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
f770: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
f780: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
f790: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
f7a0: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
f7b0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f7c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
f7d0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
f7e0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
f7f0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
f800: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
f810: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
f820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
f830: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f840: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
f850: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
f860: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
f870: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
f880: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
f890: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f8a0: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
f8b0: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
f8c0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
f8d0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
f8e0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
f8f0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
f900: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
f910: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f920: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f930: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f940: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f950: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f960: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f970: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f980: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f990: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f9a0: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f9b0: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f9c0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f9d0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f9e0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
f9f0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
fa00: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
fa10: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
fa20: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
fa30: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fa40: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
fa50: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
fa60: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fa70: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
fa80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fa90: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
faa0: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
fab0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
fac0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
fad0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
fae0: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
faf0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
fb00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
fb10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
fb20: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
fb30: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
fb40: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
fb50: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
fb60: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
fb70: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
fb80: 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54   affinity>=SQLIT
fb90: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b  E_AFF_NUMERIC ){
fba0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
fbb0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
fbc0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
fbd0: 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
fbe0: 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e  {.        applyN
fbf0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
fc00: 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a  In1,0);.      }.
fc10: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
fc20: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
fc30: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
fc40: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
fc50: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
fc60: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
fc70: 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n3,0);.      }. 
fc80: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66     }else if( aff
fc90: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
fca0: 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  F_TEXT ){.      
fcb0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
fcc0: 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
fcd0: 26 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  & (pIn1->flags &
fce0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
fcf0: 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
fd00: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
fd10: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
fd20: 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
fd30: 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
fd40: 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
fd50: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
fd60: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
fd70: 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
fd80: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
fd90: 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26  stcase( (flags1&
fda0: 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
fdb0: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  1->flags&MEM_Dyn
fdc0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
fdd0: 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs1 = (pIn1->fla
fde0: 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
fdf0: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20  sk) | (flags1 & 
fe00: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
fe10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
fe20: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fe30: 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
fe40: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
fe50: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
fe60: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
fe70: 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
fe80: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
fe90: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
fea0: 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
feb0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
fec0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
fed0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
fee0: 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In3, encoding, 1
fef0: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
ff00: 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d  ase( (flags3&MEM
ff10: 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e  _Dyn) != (pIn3->
ff20: 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
ff30: 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33  ;.        flags3
ff40: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20   = (pIn3->flags 
ff50: 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
ff60: 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d   | (flags3 & MEM
ff70: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
ff80: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
ff90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
ffa0: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
ffb0: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
ffc0: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e  0 );.    if( pIn
ffd0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  1->flags & MEM_Z
ffe0: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
fff0: 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
10000 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20  dBlob(pIn1);.   
10010 20 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45     flags1 &= ~ME
10020 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20  M_Zero;.    }.  
10030 20 20 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67    if( pIn3->flag
10040 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
10050 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10060 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
10070 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67  In3);.      flag
10080 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b  s3 &= ~MEM_Zero;
10090 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64  .    }.    if( d
100a0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
100b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
100c0 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
100d0 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
100e0 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
100f0 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69  Coll);.  }.  swi
10100 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
10110 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
10120 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Eq:    res = res
10130 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  ==0;     break;.
10140 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20      case OP_Ne: 
10150 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b     res = res!=0;
10160 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10170 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72  case OP_Lt:    r
10180 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20  es = res<0;     
10190 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
101a0 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d   OP_Le:    res =
101b0 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
101c0 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
101d0 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Gt:    res = res
101e0 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  >0;      break;.
101f0 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
10200 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b     res = res>=0;
10210 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
10220 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
10230 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
10240 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
10250 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
10260 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65  sters. */.  asse
10270 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
10280 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
10290 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e  flags1 & MEM_Dyn
102a0 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
102b0 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61  gs = flags1;.  a
102c0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
102d0 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
102e0 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  = (flags3 & MEM_
102f0 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e  Dyn) );.  pIn3->
10300 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
10310 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
10320 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10330 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
10340 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10350 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
10360 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
10370 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10380 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
10390 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
103a0 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45  res;.    REGISTE
103b0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
103c0 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b   pOut);.  }else{
103d0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
103e0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f  aken(res!=0, (pO
103f0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
10400 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20  ULLEQ)?2:3);.   
10410 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
10420 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
10430 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  2;.    }.  }.  b
10440 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10450 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20  de: Permutation 
10460 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
10470 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61   Set the permuta
10480 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
10490 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
104a0 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65 20 61  ator to be the a
104b0 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67  rray.** of integ
104c0 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a  ers in P4..**.**
104d0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
104e0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75   is only valid u
104f0 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20 4f 50  ntil the next OP
10500 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20 68 61  _Compare that ha
10510 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  s.** the OPFLAG_
10520 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74 20  PERMUTE bit set 
10530 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c 6c 79  in P5. Typically
10540 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74 61 74   the OP_Permutat
10550 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f  ion should .** o
10560 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  ccur immediately
10570 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 4f 50   prior to the OP
10580 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2f 0a 63 61 73  _Compare..*/.cas
10590 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
105a0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
105b0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
105c0 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
105d0 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
105e0 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70  ;.  aPermute = p
105f0 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 62 72 65  Op->p4.ai;.  bre
10600 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10610 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  : Compare P1 P2 
10620 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
10630 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c  psis: r[P1@P3] <
10640 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  -> r[P2@P3].**.*
10650 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76 65  * Compare two ve
10660 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74 65  ctors of registe
10670 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e 72  rs in reg(P1)..r
10680 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61 6c  eg(P1+P3-1) (cal
10690 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72  l this.** vector
106a0 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65 67   "A") and in reg
106b0 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d  (P2)..reg(P2+P3-
106c0 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65 20  1) ("B").  Save 
106d0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a  the result of.**
106e0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
106f0 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6e  for use by the n
10700 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74  ext OP_Jump inst
10710 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ruct..**.** If P
10720 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
10730 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65 74  _PERMUTE bit set
10740 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72  , then the order
10750 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
10760 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20  s.** determined 
10770 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  by the most rece
10780 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  nt OP_Permutatio
10790 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66 20  n operator.  If 
107a0 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45  the.** OPFLAG_PE
107b0 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c 65  RMUTE bit is cle
107c0 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74 65  ar, then registe
107d0 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 69  r are compared i
107e0 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20  n sequential.** 
107f0 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  order..**.** P4 
10800 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  is a KeyInfo str
10810 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66 69  ucture that defi
10820 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  nes collating se
10830 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72 74  quences and sort
10840 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20 74  .** orders for t
10850 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
10860 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
10870 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69 73  applies to regis
10880 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ters.** only.  T
10890 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65  he KeyInfo eleme
108a0 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65 71  nts are used seq
108b0 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  uentially..**.**
108c0 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   The comparison 
108d0 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61 72  is a sort compar
108e0 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63  ison, so NULLs c
108f0 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a  ompare equal,.**
10900 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73 20   NULLs are less 
10910 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75  than numbers, nu
10920 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
10930 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20  han strings,.** 
10940 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
10950 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
10960 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70  .*/.case OP_Comp
10970 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  are: {.  int n;.
10980 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70    int i;.  int p
10990 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 63  1;.  int p2;.  c
109a0 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  onst KeyInfo *pK
109b0 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64  eyInfo;.  int id
109c0 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  x;.  CollSeq *pC
109d0 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  oll;    /* Colla
109e0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74 6f  ting sequence to
109f0 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65 72   use on this ter
10a00 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b  m */.  int bRev;
10a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
10a20 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e 47  e for DESCENDING
10a30 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a 0a   sort order */..
10a40 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
10a50 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29   OPFLAG_PERMUTE)
10a60 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20 3d  ==0 ) aPermute =
10a70 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   0;.  n = pOp->p
10a80 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
10a90 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
10aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
10ab0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
10ac0 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
10ad0 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
10ae0 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 20   = pOp->p2;.#if 
10af0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
10b00 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
10b10 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
10b20 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
10b30 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
10b40 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
10b50 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
10b60 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
10b70 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
10b80 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
10b90 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
10ba0 20 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d   p2>0 && p2+mx<=
10bb0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
10bc0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
10bd0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
10be0 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
10bf0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
10c00 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
10c10 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
10c20 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
10c30 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
10c40 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
10c50 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
10c60 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
10c70 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
10c80 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
10c90 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
10ca0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
10cb0 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
10cc0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
10cd0 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
10ce0 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
10cf0 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
10d00 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
10d10 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
10d20 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
10d30 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
10d40 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
10d50 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  nfo->nField );. 
10d60 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49     pColl = pKeyI
10d70 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20  nfo->aColl[i];. 
10d80 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49 6e     bRev = pKeyIn
10d90 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69  fo->aSortOrder[i
10da0 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20  ];.    iCompare 
10db0 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
10dc0 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  are(&aMem[p1+idx
10dd0 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  ], &aMem[p2+idx]
10de0 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66  , pColl);.    if
10df0 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20  ( iCompare ){.  
10e00 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20 69      if( bRev ) i
10e10 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70  Compare = -iComp
10e20 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  are;.      break
10e30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 50  ;.    }.  }.  aP
10e40 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62 72  ermute = 0;.  br
10e50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10e60 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50 33  e: Jump P1 P2 P3
10e70 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
10e80 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69  to the instructi
10e90 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50 31  on at address P1
10ea0 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70 65  , P2, or P3 depe
10eb0 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
10ec0 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  .** in the most 
10ed0 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72  recent OP_Compar
10ee0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  e instruction th
10ef0 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73 20  e P1 vector was 
10f00 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75  less than.** equ
10f10 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65  al to, or greate
10f20 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76 65  r than the P2 ve
10f30 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76 65  ctor, respective
10f40 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  ly..*/.case OP_J
10f50 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ump: {          
10f60 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
10f70 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20 29  if( iCompare<0 )
10f80 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
10f90 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70 20  Taken(0,3); pOp 
10fa0 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d  = &aOp[pOp->p1 -
10fb0 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   1];.  }else if(
10fc0 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a   iCompare==0 ){.
10fd0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
10fe0 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d 20  ken(1,3); pOp = 
10ff0 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31  &aOp[pOp->p2 - 1
11000 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
11010 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11020 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  2,3); pOp = &aOp
11030 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20  [pOp->p3 - 1];. 
11040 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11050 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50 31  * Opcode: And P1
11060 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
11070 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72  nopsis: r[P3]=(r
11080 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a  [P1] && r[P2]).*
11090 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
110a0 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68 65  gical AND of the
110b0 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
110c0 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20 61  ters P1 and P2 a
110d0 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65 20  nd.** write the 
110e0 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67 69  result into regi
110f0 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
11100 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
11110 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20 74  2 is 0 (false) t
11120 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
11130 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74  s 0 even if.** t
11140 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
11150 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
11160 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f 20  and true or two 
11170 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20  NULLs give.** a 
11180 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
11190 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31  /* Opcode: Or P1
111a0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
111b0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72  nopsis: r[P3]=(r
111c0 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a  [P1] || r[P2]).*
111d0 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f  *.** Take the lo
111e0 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65 20  gical OR of the 
111f0 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
11200 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
11210 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61 6e  .** store the an
11220 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  swer in register
11230 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69   P3..**.** If ei
11240 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73  ther P1 or P2 is
11250 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29 20   nonzero (true) 
11260 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
11270 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20 65  is 1 (true).** e
11280 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65 72  ven if the other
11290 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
112a0 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73   A NULL and fals
112b0 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a  e or two NULLs.*
112c0 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75  * give a NULL ou
112d0 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tput..*/.case OP
112e0 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20  _And:           
112f0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11300 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  _AND, in1, in2, 
11310 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
11320 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Or: {           
11330 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11340 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
11350 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20  t3 */.  int v1; 
11360 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61     /* Left opera
11370 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31  nd:  0==FALSE, 1
11380 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
11390 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  WN or NULL */.  
113a0 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52 69  int v2;    /* Ri
113b0 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d  ght operand: 0==
113c0 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
113d0 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
113e0 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  LL */..  pIn1 = 
113f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
11400 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
11410 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
11420 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d 65      v1 = 2;.  }e
11430 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73 71  lse{.    v1 = sq
11440 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
11450 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d 0a  e(pIn1)!=0;.  }.
11460 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
11470 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70  Op->p2];.  if( p
11480 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
11490 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32 20  _Null ){.    v2 
114a0 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
114b0 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56 64    v2 = sqlite3Vd
114c0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
114d0 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  !=0;.  }.  if( p
114e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
114f0 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63  nd ){.    static
11500 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
11510 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d  char and_logic[]
11520 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c   = { 0, 0, 0, 0,
11530 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d   1, 2, 0, 2, 2 }
11540 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c  ;.    v1 = and_l
11550 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
11560 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74   }else{.    stat
11570 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
11580 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b  d char or_logic[
11590 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31  ] = { 0, 1, 2, 1
115a0 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20  , 1, 1, 2, 1, 2 
115b0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c  };.    v1 = or_l
115c0 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20  ogic[v1*3+v2];. 
115d0 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65   }.  pOut = &aMe
115e0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
115f0 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d  ( v1==2 ){.    M
11600 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
11610 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
11620 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
11630 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20  ->u.i = v1;.    
11640 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
11650 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
11660 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11670 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
11680 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
11690 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72  opsis: r[P2]= !r
116a0 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
116b0 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
116c0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
116d0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
116e0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
116f0 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
11700 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
11710 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
11720 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11730 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
11740 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
11750 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
11760 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
11770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
11780 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
11790 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
117a0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
117b0 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
117c0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
117d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
117e0 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
117f0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
11800 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
11810 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
11820 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
11830 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71 6c  pOut->u.i = !sql
11840 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
11850 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
11860 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11870 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
11880 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11890 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d  s: r[P1]= ~r[P1]
118a0 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
118b0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
118c0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
118d0 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
118e0 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
118f0 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
11900 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
11910 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
11920 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
11930 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
11940 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
11950 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
11960 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
11970 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
11980 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
11990 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
119a0 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
119b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
119c0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
119d0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
119e0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
119f0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
11a00 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  0 ){.    pOut->f
11a10 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
11a20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11a30 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  ~sqlite3VdbeIntV
11a40 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  alue(pIn1);.  }.
11a50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11a60 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20 50  pcode: Once P1 P
11a70 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68  2 * * *.**.** Ch
11a80 65 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20 66  eck the "once" f
11a90 6c 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20 49  lag number P1. I
11aa0 66 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75 6d  f it is set, jum
11ab0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
11ac0 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69   P2. .** Otherwi
11ad0 73 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61 67  se, set the flag
11ae0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
11af0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
11b00 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e  struction..** In
11b10 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
11b20 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65 73  is opcode causes
11b30 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   all following o
11b40 70 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75 67  pcodes up throug
11b50 68 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74  h P2.** (but not
11b60 20 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20 74   including P2) t
11b70 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20  o run just once 
11b80 61 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70 65  and to be skippe
11b90 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 0a  d on subsequent.
11ba0 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67 68  ** times through
11bb0 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a   the loop..**.**
11bc0 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67   All "once" flag
11bd0 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  s are initially 
11be0 63 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65 72  cleared whenever
11bf0 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
11c00 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62  ement.** first b
11c10 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f  egins to run..*/
11c20 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11c40 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
11c50 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e  ( pOp->p1<p->nOn
11c60 63 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65  ceFlag );.  Vdbe
11c70 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61  BranchTaken(p->a
11c80 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
11c90 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  ]!=0, 2);.  if( 
11ca0 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
11cb0 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 67 6f 74  ->p1] ){.    got
11cc0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11cd0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f  }else{.    p->aO
11ce0 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11cf0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
11d00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11d10 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a   If P1 P2 P3 * *
11d20 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11d30 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11d40 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11d50 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75   true.  The valu
11d60 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
11d70 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69 73  ed true if it is
11d80 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e   numeric and non
11d90 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76  -zero.  If the v
11da0 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
11db0 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
11dc0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20  the jump if and 
11dd0 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f  only if P3 is no
11de0 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70  n-zero..*/./* Op
11df0 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50  code: IfNot P1 P
11e00 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
11e10 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
11e20 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
11e30 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20  er P1 is False. 
11e40 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
11e50 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73   considered fals
11e60 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75  e if it has a nu
11e70 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a  meric value of z
11e80 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
11e90 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
11ea0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
11eb0 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
11ec0 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
11ed0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
11ee0 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20 20  _If:            
11ef0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
11f00 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  1 */.case OP_IfN
11f10 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
11f20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
11f30 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31  .  int c;.  pIn1
11f40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11f50 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
11f60 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11f70 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e  ){.    c = pOp->
11f80 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66  p3;.  }else{.#if
11f90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11fa0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
11fb0 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64     c = sqlite3Vd
11fc0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11fd0 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63  !=0;.#else.    c
11fe0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65   = sqlite3VdbeRe
11ff0 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  alValue(pIn1)!=0
12000 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69  .0;.#endif.    i
12010 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
12020 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21  OP_IfNot ) c = !
12030 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  c;.  }.  VdbeBra
12040 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
12050 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20  );.  if( c ){.  
12060 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12070 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
12080 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73  }../* Opcode: Is
12090 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
120a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
120b0 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f  f r[P1]==NULL go
120c0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
120d0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
120e0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
120f0 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
12100 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
12110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12120 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
12130 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
12140 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12150 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
12160 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
12170 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12180 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)!=0, 2);.  if
12190 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
121a0 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
121b0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
121c0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
121d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
121e0 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
121f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
12200 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
12210 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
12220 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12230 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12240 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
12250 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
12260 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
12270 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12280 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
12290 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
122a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
122b0 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
122c0 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
122d0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
122e0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
122f0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12300 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
12310 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12320 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12330 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
12340 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
12350 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
12360 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49  r[P3]=PX.**.** I
12370 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74  nterpret the dat
12380 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  a that cursor P1
12390 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20   points to as a 
123a0 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20  structure built 
123b0 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b  using.** the Mak
123c0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
123d0 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d  ion.  (See the M
123e0 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
123f0 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a   for additional.
12400 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
12410 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
12420 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45  of the data.)  E
12430 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68  xtract the P2-th
12440 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20   column.** from 
12450 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66  this record.  If
12460 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20   there are less 
12470 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20  that (P2+1) .** 
12480 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65  values in the re
12490 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20  cord, extract a 
124a0 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
124b0 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20  value extracted 
124c0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
124d0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
124e0 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f  If the column co
124f0 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61  ntains fewer tha
12500 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65  n P2 fields, the
12510 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  n extract a NULL
12520 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65  .  Or,.** if the
12530 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
12540 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65  a P4_MEM use the
12550 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34   value of the P4
12560 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
12570 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a  the result..**.*
12580 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
12590 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69  CLEARCACHE bit i
125a0 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20  s set on P5 and 
125b0 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74  P1 is a pseudo-t
125c0 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20  able cursor,.** 
125d0 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f  then the cache o
125e0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
125f0 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65  reset prior to e
12600 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f  xtracting the co
12610 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72  lumn..** The fir
12620 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61  st OP_Column aga
12630 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61  inst a pseudo-ta
12640 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61  ble after the va
12650 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  lue of the conte
12660 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68  nt.** register h
12670 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c  as changed shoul
12680 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20  d have this bit 
12690 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  set..**.** If th
126a0 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41  e OPFLAG_LENGTHA
126b0 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59  RG and OPFLAG_TY
126c0 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65  PEOFARG bits are
126d0 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a   set on P5 when.
126e0 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ** the result is
126f0 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f   guaranteed to o
12700 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74  nly be used as t
12710 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61  he argument of a
12720 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20   length().** or 
12730 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
12740 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  n, respectively.
12750 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66    The loading of
12760 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e   large blobs can
12770 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66   be.** skipped f
12780 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20  or length() and 
12790 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64  all content load
127a0 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70  ing can be skipp
127b0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e  ed for typeof().
127c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
127d0 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79 6c  mn: {.  i64 payl
127e0 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75  oadSize64; /* Nu
127f0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
12800 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
12810 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
12820 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75      /* column nu
12830 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
12840 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
12850 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
12860 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
12870 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
12880 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
12890 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
128a0 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
128b0 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
128c0 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
128d0 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
128e0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
128f0 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
12900 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
12910 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
12920 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
12930 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12950 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
12960 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
12970 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
12980 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
12990 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
129a0 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
129b0 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
129c0 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
129d0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
129e0 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
129f0 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
12a00 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
12a10 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
12a20 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
12a30 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
12a40 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
12a50 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
12a60 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
12a70 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
12a80 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
12a90 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66  ader */.  u32 of
12aa0 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  fset;        /* 
12ab0 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  Offset into the 
12ac0 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73 7a  data */.  u32 sz
12ad0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a 20  Field;       /* 
12ae0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12af0 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  in the content o
12b00 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20 75  f a field */.  u
12b10 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  32 avail;       
12b20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
12b30 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
12b40 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
12b50 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
12b60 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
12b70 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
12b80 61 64 65 72 20 2a 2f 0a 20 20 75 31 36 20 66 78  ader */.  u16 fx
12b90 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12ba0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c  pDest->flags val
12bb0 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  ue */.  Mem *pRe
12bc0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73  g;         /* Ps
12bd0 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20  eudoTable input 
12be0 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70  register */..  p
12bf0 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
12c00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
12c10 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
12c20 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
12c30 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  ) );.  pDest = &
12c40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
12c50 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
12c60 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61  e(p, pDest);.  a
12c70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
12c80 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
12c90 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
12ca0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
12cb0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
12cc0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
12cd0 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20  ( p2<pC->nField 
12ce0 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70  );.  aOffset = p
12cf0 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66 6e  C->aOffset;.#ifn
12d00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
12d10 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
12d20 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
12d30 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20  Cursor==0 ); /* 
12d40 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20  OP_Column never 
12d50 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61  called on virtua
12d60 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  l table */.#endi
12d70 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
12d80 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
12d90 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
12da0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
12db0 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20  g>0 ); /* pCrsr 
12dc0 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61  NULL on PseudoTa
12dd0 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
12de0 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
12df0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20  ->nullRow );    
12e00 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c        /* pC->nul
12e10 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61  lRow on PseudoTa
12e20 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  bles */..  /* If
12e30 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
12e40 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e  e is stale, brin
12e50 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
12e60 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
12e70 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
12e80 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20  o(pC);.  if( rc 
12e90 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
12ea0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
12eb0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
12ec0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
12ed0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
12ee0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
12ef0 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20 20  ( pCrsr==0 ){.  
12f00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
12f10 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12f20 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52  >0 );.        pR
12f30 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 70  eg = &aMem[pC->p
12f40 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
12f50 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12f60 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
12f70 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
12f80 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
12f90 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
12fa0 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
12fb0 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f  dSize = pC->szRo
12fc0 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67  w = avail = pReg
12fd0 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ->n;.        pC-
12fe0 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65  >aRow = (u8*)pRe
12ff0 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g->z;.      }els
13000 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
13010 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
13020 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20  (pDest);.       
13030 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13040 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
13050 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
13060 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
13070 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54       if( pC->isT
13080 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  able==0 ){.     
13090 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
130a0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
130b0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
130c0 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28         VVA_ONLY(
130d0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
130e0 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c  eeKeySize(pCrsr,
130f0 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29   &payloadSize64)
13100 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
13110 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
13120 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75  ); /* True becau
13130 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65  se of CursorMove
13140 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20  to() call above 
13150 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71  */.        /* sq
13160 6c 69 74 65 33 42 74 72 65 65 50 61 72 73 65 43  lite3BtreeParseC
13170 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20 67 65  ellPtr() uses ge
13180 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65  tVarint32() to e
13190 78 74 72 61 63 74 20 74 68 65 0a 20 20 20 20 20  xtract the.     
131a0 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69     ** payload si
131b0 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70  ze, so it is imp
131c0 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c  ossible for payl
131d0 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a  oadSize64 to be.
131e0 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65          ** large
131f0 72 20 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20  r than 32 bits. 
13200 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
13210 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36  t( (payloadSize6
13220 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  4 & SQLITE_MAX_U
13230 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61  32)==(u64)payloa
13240 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20  dSize64 );.     
13250 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
13260 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46 65 74  lite3BtreeKeyFet
13270 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
13280 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
13290 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33  ayloadSize = (u3
132a0 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b  2)payloadSize64;
132b0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
132c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
132d0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
132e0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
132f0 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
13300 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
13310 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
13320 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61  rsr, &pC->payloa
13330 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20  dSize);.        
13340 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
13350 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61  TE_OK );   /* Da
13360 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20  taSize() cannot 
13370 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  fail */.        
13380 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74  pC->aRow = sqlit
13390 65 33 42 74 72 65 65 44 61 74 61 46 65 74 63 68  e3BtreeDataFetch
133a0 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
133b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
133c0 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35  ssert( avail<=65
133d0 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d  536 );  /* Maxim
133e0 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  um page size is 
133f0 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69  64KiB */.      i
13400 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
13410 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c  ze <= (u32)avail
13420 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   ){.        pC->
13430 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c  szRow = pC->payl
13440 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d  oadSize;.      }
13450 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43  else{.        pC
13460 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b  ->szRow = avail;
13470 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
13480 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
13490 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
134a0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
134b0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
134c0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
134d0 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  g;.      }.    }
134e0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
134f0 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
13500 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72  tr;.    pC->iHdr
13510 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69  Offset = getVari
13520 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f  nt32(pC->aRow, o
13530 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e  ffset);.    pC->
13540 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
13550 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d      aOffset[0] =
13560 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20 2f 2a   offset;..    /*
13570 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
13580 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
13590 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
135a0 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
135b0 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
135c0 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
135d0 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
135e0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
135f0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
13600 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
13610 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
13620 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
13630 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
13640 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
13650 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
13660 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
13670 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
13680 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
13690 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
136a0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
136b0 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
136c0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
136d0 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
136e0 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
136f0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
13700 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
13710 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
13720 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
13730 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
13740 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
13750 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
13760 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
13770 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
13780 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
13790 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
137a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
137b0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
137c0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
137d0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
137e0 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73    if( avail<offs
137f0 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70  et ){.      /* p
13800 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
13810 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68   have to hold th
13820 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75  e entire row, bu
13830 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61  t it does at lea
13840 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64  st.      ** need
13850 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
13860 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f  ader of the reco
13870 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77  rd.  If pC->aRow
13880 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
13890 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  n.      ** the c
138a0 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20  omplete header, 
138b0 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a  then set it to z
138c0 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65  ero, forcing the
138d0 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20   header to be.  
138e0 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c      ** dynamical
138f0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f  ly allocated. */
13900 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
13910 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73  = 0;.      pC->s
13920 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  zRow = 0;.    }.
13930 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
13940 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e  owing goto is an
13950 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20   optimization.  
13960 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65  It can be omitte
13970 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65 76 65  d and.    ** eve
13980 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74 69  rything will sti
13990 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50  ll work.  But OP
139a0 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75  _Column is measu
139b0 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20 20  rably faster.   
139c0 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20   ** by skipping 
139d0 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 63  the subsequent c
139e0 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63  onditional, whic
139f0 68 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65  h is always true
13a00 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
13a10 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72  ert( pC->nHdrPar
13a20 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20  sed<=p2 );      
13a30 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61     /* Conditiona
13a40 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20  l skipped */.   
13a50 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13a60 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 7d  read_header;.  }
13a70 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
13a80 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69   at least the fi
13a90 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73  rst p2+1 entries
13aa0 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68   of the header h
13ab0 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61  ave been.  ** pa
13ac0 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69  rsed and valid i
13ad0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e  nformation is in
13ae0 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70   aOffset[] and p
13af0 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f  C->aType[]..  */
13b00 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50  .  if( pC->nHdrP
13b10 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20  arsed<=p2 ){.   
13b20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
13b30 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69  more header avai
13b40 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e  lable for parsin
13b50 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  g in the record,
13b60 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65   try.    ** to e
13b70 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61  xtract additiona
13b80 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f  l fields up thro
13b90 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20  ugh the p2+1-th 
13ba0 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20  field .    */.  
13bb0 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64    op_column_read
13bc0 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 69 66 28  _header:.    if(
13bd0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
13be0 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
13bf0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
13c00 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
13c10 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
13c20 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
13c30 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
13c40 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
13c50 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
13c60 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
13c70 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
13c80 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
13c90 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
13ca0 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f  ree(pCrsr, 0, aO
13cb0 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20 20  ffset[0], .     
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26 73  !pC->isTable, &s
13cf0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  Mem);.        if
13d00 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
13d10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
13d20 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f  o op_column_erro
13d30 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
13d40 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38       zData = (u8
13d50 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20  *)sMem.z;.      
13d60 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a  }else{.        z
13d70 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
13d80 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
13d90 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d    /* Fill in pC-
13da0 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f  >aType[i] and aO
13db0 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20  ffset[i] values 
13dc0 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74  through the p2-t
13dd0 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20  h field. */.    
13de0 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
13df0 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
13e00 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  et = aOffset[i];
13e10 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
13e20 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
13e30 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
13e40 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
13e50 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
13e60 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26  assert( i<=p2 &&
13e70 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b   zHdr<zEndHdr );
13e80 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
13e90 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30     if( zHdr[0]<0
13ea0 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  x80 ){.         
13eb0 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20   t = zHdr[0];.  
13ec0 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a          zHdr++;.
13ed0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
13ee0 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d           zHdr +=
13ef0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
13f00 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20  t32(zHdr, &t);. 
13f10 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
13f20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20   pC->aType[i] = 
13f30 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65  t;.        szFie
13f40 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ld = sqlite3Vdbe
13f50 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
13f60 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ;.        offset
13f70 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20   += szField;.   
13f80 20 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c       if( offset<
13f90 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54  szField ){  /* T
13fa0 72 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76  rue if offset ov
13fb0 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20  erflows */.     
13fc0 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e       zHdr = &zEn
13fd0 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72  dHdr[1];  /* For
13fe0 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ces SQLITE_CORRU
13ff0 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20  PT return below 
14000 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  */.          bre
14010 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
14020 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20        i++;.     
14030 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20     aOffset[i] = 
14040 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d 77  offset;.      }w
14050 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a  hile( i<=p2 && z
14060 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
14070 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
14080 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
14090 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
140a0 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
140b0 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
140c0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
140d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
140e0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
140f0 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65 6d  m);.        sMem
14100 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  .flags = MEM_Nul
14110 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  l;.      }.  .  
14120 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
14130 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
14140 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
14150 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
14160 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
14170 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
14180 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
14190 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
141a0 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
141b0 2a 20 20 20 20 20 20 20 20 20 20 28 7a 48 64 72  *          (zHdr
141c0 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20 20 20 20  >zEndHdr).      
141d0 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72  ** (2) the entir
141e0 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65  e header was use
141f0 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61  d but not all da
14200 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20  ta was used.    
14210 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a    **          (z
14220 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr==zEndHdr && 
14230 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c  offset!=pC->payl
14240 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 2a  oadSize).      *
14250 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66  * (3) the end of
14260 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64   the data extend
14270 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64  s beyond the end
14280 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   of the record..
14290 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
142a0 20 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e    (offset > pC->
142b0 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
142c0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
142d0 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26  (zHdr>=zEndHdr &
142e0 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20  & (zHdr>zEndHdr 
142f0 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70  || offset!=pC->p
14300 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
14310 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e      || (offset >
14320 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
14330 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
14340 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
14350 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
14360 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14370 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
14380 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a   }.    }..    /*
14390 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
143a0 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
143b0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
143c0 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
143d0 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
143e0 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
143f0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
14400 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
14410 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
14420 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
14430 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
14440 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
14450 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
14460 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
14470 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
14480 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14490 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
144a0 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
144b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
144c0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
144d0 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
144e0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
144f0 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
14500 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14510 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14520 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
14530 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14540 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
14550 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
14560 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
14570 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
14580 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
14590 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
145a0 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
145b0 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
145c0 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
145d0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
145e0 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
145f0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
14600 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
14610 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
14620 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
14630 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
14640 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
14650 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
14660 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
14670 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
14680 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
14690 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
146a0 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
146b0 32 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a  2];.  if( pC->sz
146c0 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b  Row>=aOffset[p2+
146d0 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  1] ){.    /* Thi
146e0 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  s is the common 
146f0 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64  case where the d
14700 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66  esired content f
14710 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69  its on the origi
14720 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20  nal.    ** page 
14730 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74  - where the cont
14740 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e  ent is not on an
14750 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a   overflow page *
14760 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
14770 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61  eSerialGet(pC->a
14780 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c  Row+aOffset[p2],
14790 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d 65   t, pDest);.  }e
147a0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
147b0 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20   branch happens 
147c0 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e  only when conten
147d0 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  t is on overflow
147e0 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66   pages */.    if
147f0 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
14800 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
14810 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
14820 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
14830 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
14840 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
14850 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
14860 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
14870 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
14880 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14890 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
148a0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
148b0 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
148c0 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20  t for.      **  
148d0 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28    1. the typeof(
148e0 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20  ) function,.    
148f0 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c    **    2. the l
14900 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
14910 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
14920 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20  , and.      **  
14930 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74    3. if the cont
14940 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65  ent length is ze
14950 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20  ro..      ** So 
14960 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c  we might as well
14970 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   use bogus conte
14980 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
14990 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  eading.      ** 
149a0 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73  content from dis
149b0 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77 6f  k.  NULL will wo
149c0 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65  rk for the value
149d0 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20 20   for strings.   
149e0 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73 20     ** and blobs 
149f0 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20  and whatever is 
14a00 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69  in the payloadSi
14a10 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20  ze64 variable.  
14a20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b      ** will work
14a30 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20   for everything 
14a40 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20 73  else. */.      s
14a50 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
14a60 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38 2a  Get(t<=13 ? (u8*
14a70 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  )&payloadSize64 
14a80 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  : 0, t, pDest);.
14a90 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14aa0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
14ab0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
14ac0 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
14ad0 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61  , len, !pC->isTa
14ae0 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ble,.           
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b 0a          pDest);.
14b10 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
14b20 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
14b30 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
14b40 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
14b50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
14b60 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e  beSerialGet((con
14b70 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c  st u8*)pDest->z,
14b80 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
14b90 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
14ba0 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
14bb0 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d    }.  }.  pDest-
14bc0 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
14bd0 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
14be0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c  .  /* If the col
14bf0 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e 20  umn value is an 
14c00 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
14c10 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20 70  , go ahead and p
14c20 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61 74  ersist.  ** that
14c30 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65 20   string in case 
14c40 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73  the cursor moves
14c50 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c 75   before the colu
14c60 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a 2a  mn value is.  **
14c70 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c   used.  The foll
14c80 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73 20  owing code does 
14c90 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  the equivalent o
14ca0 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  f Deephemeralize
14cb0 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65 73  ().  ** but does
14cc0 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a 20   it faster. */. 
14cd0 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c 61   if( (pDest->fla
14ce0 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 21  gs & MEM_Ephem)!
14cf0 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20 29  =0 && pDest->z )
14d00 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73 74  {.    fx = pDest
14d10 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
14d20 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  tr|MEM_Blob);.  
14d30 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30 20    assert( fx!=0 
14d40 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20 28  );.    zData = (
14d50 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d  const u8*)pDest-
14d60 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70 44  >z;.    len = pD
14d70 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20  est->n;.    if( 
14d80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
14d90 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44 65  earAndResize(pDe
14da0 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f 74  st, len+2) ) got
14db0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d 65  o no_mem;.    me
14dc0 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a  mcpy(pDest->z, z
14dd0 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20  Data, len);.    
14de0 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20  pDest->z[len] = 
14df0 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  0;.    pDest->z[
14e00 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
14e10 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 66  pDest->flags = f
14e20 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  x|MEM_Term;.  }.
14e30 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a  op_column_error:
14e40 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
14e50 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
14e60 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
14e70 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
14e80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14e90 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
14ea0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
14eb0 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
14ec0 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
14ed0 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
14ee0 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
14ef0 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
14f00 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
14f10 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
14f20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14f30 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14f40 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
14f50 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
14f60 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
14f70 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14f80 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
14f90 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
14fa0 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
14fb0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
14fc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
14fd0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
14fe0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
14ff0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
15000 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
15010 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b   */.  char cAff;
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15030 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61  * A single chara
15040 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79  cter of affinity
15050 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
15060 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
15070 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
15080 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
15090 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d  ( zAffinity[pOp-
150a0 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  >p2]==0 );.  pIn
150b0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
150c0 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41  1];.  while( (cA
150d0 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79  ff = *(zAffinity
150e0 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61  ++))!=0 ){.    a
150f0 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26  ssert( pIn1 <= &
15100 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  p->aMem[(p->nMem
15110 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
15120 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15130 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15140 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15150 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
15160 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
15170 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
15180 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15190 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
151a0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
151b0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
151c0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
151d0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
151e0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
151f0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
15200 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
15210 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
15220 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
15230 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
15240 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
15250 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
15260 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
15270 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
15280 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
15290 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
152a0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
152b0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
152c0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
152d0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
152e0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
152f0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15300 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15310 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15320 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
15330 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
15340 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
15350 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
15360 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
15370 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
15380 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
15390 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
153a0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
153b0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
153c0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
153d0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
153e0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
153f0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
15400 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
15410 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
15420 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
15430 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
15440 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
15450 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
15460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15470 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15480 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
15490 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
154a0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
154b0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
154c0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
154d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
154e0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
154f0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
15500 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
15510 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
15520 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
15530 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
15540 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
15550 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15560 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15570 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15580 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15590 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
155a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
155b0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
155c0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
155d0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
155e0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
155f0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
15600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
15610 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
15620 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
15630 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15640 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
15650 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
15660 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15670 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
15680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15690 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
156a0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
156b0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
156c0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
156d0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
156e0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
156f0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
15700 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
15710 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
15720 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
15730 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
15740 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
15750 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
15760 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
15770 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
15780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15790 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
157a0 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
157b0 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  t */.  int len; 
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
157d0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
157e0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
157f0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
15800 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
15810 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
15820 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
15830 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
15840 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
15850 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15860 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15870 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15880 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
15890 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
158a0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
158b0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
158c0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
158d0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
158e0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
158f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15900 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15910 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15920 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
15930 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
15940 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
15950 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
15960 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
15970 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
15980 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
15990 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
159a0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
159b0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
159c0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
159d0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
159e0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
159f0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
15a00 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
15a10 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
15a20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
15a30 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
15a40 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
15a50 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
15a60 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
15a70 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
15a80 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
15a90 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
15aa0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15ab0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
15ac0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
15ad0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15ae0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
15af0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
15b00 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
15b10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
15b20 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
15b30 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
15b40 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
15b50 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
15b60 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
15b70 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
15b80 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
15b90 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
15ba0 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ield<=(p->nMem-p
15bb0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
15bc0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
15bd0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
15be0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
15bf0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
15c00 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
15c10 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
15c20 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
15c30 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
15c40 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
15c50 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
15c60 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
15c70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
15c80 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
15c90 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
15ca0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
15cb0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
15cc0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
15cd0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
15ce0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
15cf0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
15d00 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
15d10 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
15d20 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
15d30 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15d40 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
15d50 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
15d60 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
15d70 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
15d80 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
15d90 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
15da0 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
15db0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
15dc0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20  ty[0] );.  }..  
15dd0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
15de0 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
15df0 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
15e00 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
15e10 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
15e20 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
15e30 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
15e40 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
15e50 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
15e60 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
15e70 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
15e80 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d  ec) );.    pRec-
15e90 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
15ea0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
15eb0 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
15ec0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
15ed0 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
15ee0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15ef0 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
15f00 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
15f10 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
15f20 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44   ){.      if( nD
15f30 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ata ){.        i
15f40 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
15f50 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
15f60 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
15f70 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
15f80 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70        nZero += p
15f90 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
15fa0 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65        len -= pRe
15fb0 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
15fc0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44    }.    }.    nD
15fd0 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
15fe0 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
15ff0 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20  _type==127 );.  
16000 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
16010 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a  al_type==128 );.
16020 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69      nHdr += seri
16030 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31  al_type<=127 ? 1
16040 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   : sqlite3Varint
16050 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
16060 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70  ;.  }while( (--p
16070 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a  Rec)>=pData0 );.
16080 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  /* EVIDENCE-O
16090 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37  F: R-22564-11647
160a0 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69   The header begi
160b0 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
160c0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69   varint.  ** whi
160d0 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
160e0 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
160f0 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
16100 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e  eader. The varin
16110 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20  t.  ** value is 
16120 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
16130 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20  header in bytes 
16140 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
16150 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69  ze varint.  ** i
16160 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74  tself. */.  test
16170 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
16180 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
16190 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
161a0 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
161b0 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
161c0 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
161d0 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
161e0 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
161f0 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
16200 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
16210 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
16220 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
16230 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
16240 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
16250 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
16260 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
16270 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
16280 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
16290 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b  ta;.  if( nByte+
162a0 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
162b0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
162c0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
162d0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
162e0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
162f0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16300 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
16310 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
16320 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
16330 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
16340 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
16350 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
16360 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
16370 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
16380 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
16390 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
163a0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
163b0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
163c0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
163d0 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
163e0 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
163f0 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
16400 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
16410 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
16420 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
16430 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
16440 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
16450 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
16460 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
16470 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
16480 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
16490 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
164a0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
164b0 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
164c0 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
164d0 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
164e0 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
164f0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
16500 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
16510 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
16520 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
16530 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
16540 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
16550 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
16560 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
16570 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
16580 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
16590 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
165a0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
165b0 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
165c0 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
165d0 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
165e0 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
165f0 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
16600 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
16610 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
16620 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
16630 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
16640 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
16650 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16660 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
16670 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
16680 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
16690 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
166a0 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
166b0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
166c0 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
166d0 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
166e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
166f0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
16700 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
16710 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
16720 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
16730 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
16740 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28   MEM_Blob;.  if(
16750 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
16760 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
16770 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
16780 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
16790 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
167a0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
167b0 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
167c0 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
167d0 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
167e0 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
167f0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
16800 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
16810 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
16820 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
16830 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
16840 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
16850 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
16860 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
16870 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
16880 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
16890 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
168a0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
168b0 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
168c0 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
168d0 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
168e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
168f0 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
16900 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
16910 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
16920 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
16930 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
16940 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
16950 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75 72  r[pOp->p1]->pCur
16960 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
16970 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
16980 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
16990 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
169a0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
169b0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
169c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
169d0 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
169e0 79 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  y);.  pOut = out
169f0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
16a00 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
16a10 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
16a20 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
16a30 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
16a40 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
16a50 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
16a60 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
16a70 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
16a80 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
16a90 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
16aa0 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
16ab0 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
16ac0 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
16ad0 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
16ae0 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
16af0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
16b00 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
16b10 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
16b20 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
16b30 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
16b40 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
16b50 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b70 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
16b80 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
16b90 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16bb0 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
16bc0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
16bd0 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
16be0 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
16bf0 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
16c00 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
16c10 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
16c20 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
16c30 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
16c40 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
16c50 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
16c60 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
16c70 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
16c80 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
16c90 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
16ca0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
16cb0 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
16cc0 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
16cd0 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
16ce0 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
16cf0 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
16d00 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
16d10 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
16d20 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
16d30 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
16d40 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
16d50 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
16d60 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
16d70 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
16d80 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16d90 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
16da0 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
16db0 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
16dc0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
16dd0 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
16de0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
16df0 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
16e00 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
16e10 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
16e20 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
16e30 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
16e40 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
16e50 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
16e60 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
16e70 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
16e80 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
16e90 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
16ea0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
16eb0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
16ec0 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
16ed0 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73  avepoint - SQL s
16ee0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
16ef0 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
16f00 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
16f10 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
16f20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65    nName = sqlite
16f30 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29  3Strlen30(zName)
16f40 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
16f50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
16f60 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  BLE.      /* Thi
16f70 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65  s call is Ok eve
16f80 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f  n if this savepo
16f90 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  int is actually 
16fa0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  a transaction.  
16fb0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
16fc0 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20   (and therefore 
16fd0 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70  should not promp
16fe0 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20  t xSavepoint()) 
16ff0 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20  callbacks..     
17000 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   ** If this is a
17010 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
17020 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
17030 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61  ned, it is guara
17040 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74  nteed.      ** t
17050 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72  hat the db->aVTr
17060 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65  ans[] array is e
17070 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mpty.  */.      
17080 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f  assert( db->auto
17090 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
170a0 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20  >nVTrans==0 );. 
170b0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
170c0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
170d0 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
170e0 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  IN,.            
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
17110 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  nt+db->nSavepoin
17120 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  t);.      if( rc
17130 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
17140 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17150 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
17160 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61       /* Create a
17170 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73   new savepoint s
17180 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20  tructure. */.   
17190 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65     pNew = sqlite
171a0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
171b0 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
171c0 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
171d0 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
171e0 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
171f0 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
17200 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
17210 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
17220 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
17230 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
17240 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
17250 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
17260 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
17270 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
17280 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
17290 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
172a0 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
172b0 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
172c0 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
172d0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
172e0 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
172f0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
17300 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
17310 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
17320 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
17330 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
17340 20 7d 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20   }.    .        
17350 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20  /* Link the new 
17360 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74  savepoint into t
17370 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
17380 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20  le's list. */.  
17390 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78        pNew->pNex
173a0 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
173b0 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
173c0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65  pSavepoint = pNe
173d0 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  w;.        pNew-
173e0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d  >nDeferredCons =
173f0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
17400 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ns;.        pNew
17410 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
17420 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
17430 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
17440 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
17450 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  {.    iSavepoint
17460 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
17470 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
17480 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
17490 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
174a0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
174b0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
174c0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
174d0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
174e0 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
174f0 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
17500 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
17510 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
17520 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
17530 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
17540 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
17550 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
17560 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
17570 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
17580 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
17590 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
175a0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
175b0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e  3VdbeError(p, "n
175c0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
175d0 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
175e0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
175f0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
17600 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
17610 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
17620 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
17630 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
17640 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
17650 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
17660 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
17670 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
17680 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
17690 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
176a0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
176b0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
176c0 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73  , "cannot releas
176d0 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  e savepoint - ".
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176f0 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73            "SQL s
17700 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17710 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
17720 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17730 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
17740 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
17750 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
17760 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
17770 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
17780 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
17790 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
177a0 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
177b0 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
177c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
177d0 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
177e0 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
177f0 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
17800 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
17810 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
17820 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
17830 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
17840 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
17850 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
17860 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
17870 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
17880 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
17890 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
178a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
178b0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
178c0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
178d0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
178e0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
178f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
17900 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
17910 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
17920 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
17930 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
17940 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
17950 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
17960 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
17970 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17980 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
17990 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
179a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
179b0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
179c0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
179d0 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
179e0 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
179f0 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63          int isSc
17a00 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
17a10 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
17a20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
17a30 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31  - iSavepoint - 1
17a40 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  ;.        if( p1
17a50 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
17a60 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
17a70 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
17a80 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20   = (db->flags & 
17a90 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
17aa0 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20 20  nges)!=0;.      
17ab0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
17ac0 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
17ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
17ae0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72  = sqlite3BtreeTr
17af0 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
17b00 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20  >aDb[ii].pBt,.  
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52       SQLITE_ABOR
17b40 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20  T_ROLLBACK,.    
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
17b80 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e==0);.         
17b90 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17ba0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17bb0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17bc0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
17bd0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17be0 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
17bf0 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nge = 0;.       
17c00 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69   }.        for(i
17c10 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
17c20 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
17c30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
17c40 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62 2d  reeSavepoint(db-
17c50 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31  >aDb[ii].pBt, p1
17c60 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  , iSavepoint);. 
17c70 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
17c80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
17c90 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
17ca0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17cb0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
17cc0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17cd0 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68 61   if( isSchemaCha
17ce0 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  nge ){.         
17cf0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
17d00 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
17d10 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
17d20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
17d30 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
17d40 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
17d50 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64    db->flags = (d
17d60 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54  b->flags | SQLIT
17d70 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
17d80 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17d90 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
17da0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
17db0 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
17dc0 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42  RELEASE or ROLLB
17dd0 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c  ACK, destroy all
17de0 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70   .      ** savep
17df0 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73  oints nested ins
17e00 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70  ide of the savep
17e10 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
17e20 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20  ted on. */.     
17e30 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76   while( db->pSav
17e40 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69  epoint!=pSavepoi
17e50 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  nt ){.        pT
17e60 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
17e70 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
17e80 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
17e90 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
17ea0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
17eb0 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
17ec0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
17ed0 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
17ee0 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
17ef0 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
17f00 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
17f10 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
17f20 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20  rated on .      
17f30 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73  ** too. If it is
17f40 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20   a ROLLBACK TO, 
17f50 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d  then set the num
17f60 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
17f70 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72  .      ** constr
17f80 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20  aint violations 
17f90 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
17fa0 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76  atabase to the v
17fb0 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20  alue stored.    
17fc0 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61    ** when the sa
17fd0 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61  vepoint was crea
17fe0 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69  ted.  */.      i
17ff0 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
18000 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
18010 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
18020 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
18030 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
18040 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
18050 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
18060 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
18070 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
18080 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
18090 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
180a0 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
180b0 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
180c0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
180d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
180e0 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
180f0 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
18100 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
18110 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  ons;.        db-
18120 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18130 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
18140 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
18150 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
18160 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
18170 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50  ion || p1==SAVEP
18180 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
18190 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
181a0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
181b0 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65  nt(db, p1, iSave
181c0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
181d0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
181e0 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
181f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18200 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
18210 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
18220 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
18230 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
18240 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
18250 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
18260 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
18270 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
18280 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
18290 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
182a0 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
182b0 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
182c0 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
182d0 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
182e0 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
182f0 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
18300 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
18310 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
18320 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
18330 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
18340 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
18350 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
18360 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
18370 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
18380 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
18390 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
183a0 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
183b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
183c0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
183d0 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41 43 3b  .  int turnOnAC;
183e0 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
183f0 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
18400 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
18410 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e 4f 6e  Op->p2;.  turnOn
18420 41 43 20 3d 20 64 65 73 69 72 65 64 41 75 74 6f  AC = desiredAuto
18430 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d 3e 61  Commit && !db->a
18440 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61 73 73  utoCommit;.  ass
18450 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
18460 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
18470 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
18480 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
18490 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
184a0 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
184b0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
184c0 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
184d0 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
184e0 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
184f0 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
18500 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
18510 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 74 75 72  er );..  if( tur
18520 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c 62  nOnAC && !iRollb
18530 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62 65  ack && db->nVdbe
18540 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 2f  Write>0 ){.    /
18550 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75  * If this instru
18560 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
18570 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74   a COMMIT and ot
18580 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74  her VMs are writ
18590 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75 72  ing.    ** retur
185a0 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
185b0 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
185c0 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
185d0 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
185e0 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
185f0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
18600 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
18610 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
18640 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
18650 22 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  ");.    rc = SQL
18660 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
18670 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
18680 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
18690 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
186a0 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
186b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
186c0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
186d0 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
186e0 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
186f0 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  b, SQLITE_ABORT_
18700 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20  ROLLBACK);.     
18710 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
18720 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
18730 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33  f( (rc = sqlite3
18740 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31  VdbeCheckFk(p, 1
18750 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  ))!=SQLITE_OK ){
18760 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
18770 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c  _return;.    }el
18780 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  se{.      db->au
18790 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64  toCommit = (u8)d
187a0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
187b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
187c0 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
187d0 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
187e0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  ){.      p->pc =
187f0 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
18800 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
18810 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
18820 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
18830 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63  it);.      p->rc
18840 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
18850 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
18860 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
18870 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64   }.    assert( d
18880 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30  b->nStatement==0
18890 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   );.    sqlite3C
188a0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
188b0 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72  b);.    if( p->r
188c0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
188d0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
188e0 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73  E_DONE;.    }els
188f0 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
18900 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
18910 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  }.    goto vdbe_
18920 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b  return;.  }else{
18930 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
18940 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20  Error(p,.       
18950 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f   (!desiredAutoCo
18960 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74  mmit)?"cannot st
18970 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f  art a transactio
18980 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  n within a trans
18990 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20  action":(.      
189a0 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63    (iRollback)?"c
189b0 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d  annot rollback -
189c0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
189d0 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20  is active":.    
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
189f0 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
18a00 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
18a10 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20  s active"));.   
18a20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20        .    rc = 
18a30 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
18a40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
18a50 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
18a60 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
18a70 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20   P5.**.** Begin 
18a80 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
18a90 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20   database P1 if 
18aa0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
18ab0 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20   not already.** 
18ac0 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32  active..** If P2
18ad0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
18ae0 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
18af0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
18b00 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72  d, or if a .** r
18b10 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
18b20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76  is already activ
18b30 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65  e, it is upgrade
18b40 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61  d to a write-tra
18b50 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20  nsaction..** If 
18b60 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
18b70 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74   a read-transact
18b80 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a  ion is started..
18b90 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
18ba0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
18bb0 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
18bc0 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
18bd0 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
18be0 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
18bf0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
18c00 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
18c10 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
18c20 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
18c30 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
18c40 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
18c50 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
18c60 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
18c70 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ases..**.** If a
18c80 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
18c90 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
18ca0 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
18cb0 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
18cc0 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
18cd0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
18ce0 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
18cf0 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
18d00 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
18d10 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
18d20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
18d30 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
18d40 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
18d50 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
18d60 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
18d70 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18d80 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
18d90 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
18da0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
18db0 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
18dc0 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
18dd0 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
18de0 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
18df0 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
18e00 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
18e10 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
18e20 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  he changes made 
18e30 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  by this.** VDBE 
18e40 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
18e50 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
18e60 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
18e70 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
18e80 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
18e90 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
18ea0 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
18eb0 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
18ec0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
18ed0 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
18ee0 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
18ef0 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
18f00 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
18f10 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
18f20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20  also checks the 
18f30 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67  schema cookie ag
18f40 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20  ainst P3.** and 
18f50 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
18f60 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67  ation counter ag
18f70 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65  ainst P4..** The
18f80 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
18f90 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
18fa0 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
18fb0 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
18fc0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
18fd0 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
18fe0 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
18ff0 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
19000 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
19010 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
19020 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
19030 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
19040 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a    If the schema.
19050 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20  ** cookie in P3 
19060 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
19070 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69   schema cookie i
19080 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
19090 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74  eader or.** if t
190a0 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
190b0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20  tion counter in 
190c0 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P4 differs from 
190d0 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67  the current.** g
190e0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
190f0 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54  r, then an SQLIT
19100 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69  E_SCHEMA error i
19110 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65  s raised and exe
19120 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e  cution.** halts.
19130 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74    The sqlite3_st
19140 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e  ep() wrapper fun
19150 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e  ction might then
19160 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a   reprepare the.*
19170 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  * statement and 
19180 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68  rerun it from th
19190 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a  e beginning..*/.
191a0 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
191b0 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
191c0 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61  pBt;.  int iMeta
191d0 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20  ;.  int iGen;.. 
191e0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
191f0 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
19200 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
19210 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  0 || pOp->p2==0 
19220 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19230 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
19240 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
19250 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
19260 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
19270 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69   pOp->p1) );.  i
19280 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64  f( pOp->p2 && (d
19290 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
192a0 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20  E_QueryOnly)!=0 
192b0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
192c0 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20  TE_READONLY;.   
192d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
192e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
192f0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
19300 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69  p->p1].pBt;..  i
19310 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
19320 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
19330 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70  eginTrans(pBt, p
19340 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66 28  Op->p2);.    if(
19350 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
19360 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
19370 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
19380 70 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  p);.      p->rc 
19390 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
193a0 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
193b0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
193c0 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
193d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
193e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
193f0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
19400 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
19410 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
19420 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
19430 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
19440 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
19450 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
19460 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
19470 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
19480 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
19490 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
194a0 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
194b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
194c0 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
194d0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
194e0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
194f0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
19500 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
19510 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
19520 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
19530 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
19540 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19550 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
19560 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
19570 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
19580 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
19590 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
195a0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
195b0 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
195c0 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
195d0 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
195e0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
195f0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
19600 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
19610 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
19620 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
19630 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
19640 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
19650 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
19660 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
19670 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
19680 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
19690 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
196a0 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
196b0 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
196c0 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
196d0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
196e0 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
196f0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
19700 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
19710 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
19720 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
19730 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
19740 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
19750 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
19760 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32  NTATION-OF: R-32
19770 31 39 35 2d 31 39 34 36 35 20 54 68 65 20 73 63  195-19465 The sc
19780 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
19790 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20  used by SQLite. 
197a0 20 20 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20     ** each time 
197b0 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
197c0 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
197d0 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
197e0 63 61 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20  cache of the.   
197f0 20 2a 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20   ** schema used 
19800 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
19810 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
19820 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
19830 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61  of the.    ** da
19840 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
19850 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
19860 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
19870 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
19880 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
19890 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
198a0 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
198b0 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
198c0 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
198d0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
198e0 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
198f0 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
19900 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
19910 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
19920 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
19930 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
19940 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
19950 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
19960 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
19970 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
19980 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
19990 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
199a0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
199b0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
199c0 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
199d0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
199e0 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
199f0 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
19a00 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
19a10 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19a20 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
19a30 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
19a40 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
19a50 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
19a60 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
19a70 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
19a80 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
19a90 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
19aa0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
19ab0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
19ac0 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
19ad0 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
19ae0 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
19af0 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
19b00 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
19b10 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
19b20 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
19b30 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
19b40 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
19b50 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
19b60 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
19b70 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
19b80 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
19b90 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
19ba0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
19bb0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
19bc0 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
19bd0 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
19be0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
19bf0 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
19c00 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
19c10 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
19c20 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
19c30 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
19c40 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
19c50 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
19c60 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
19c70 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
19c80 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
19c90 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
19ca0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
19cb0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
19cc0 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
19cd0 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
19ce0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
19cf0 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
19d00 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
19d10 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
19d20 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
19d30 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
19d40 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
19d50 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
19d60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19d70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
19d80 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
19d90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
19da0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
19db0 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
19dc0 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
19dd0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
19de0 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
19df0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
19e00 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
19e10 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
19e20 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
19e30 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
19e40 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
19e50 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
19e60 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
19e70 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
19e80 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
19e90 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
19ea0 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
19eb0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
19ec0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
19ed0 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
19ee0 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
19ef0 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
19f00 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
19f10 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
19f20 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
19f30 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
19f40 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
19f50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
19f60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
19f70 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
19f80 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
19f90 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
19fa0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
19fb0 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
19fc0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
19fd0 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
19fe0 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
19ff0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1a000 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1a010 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1a020 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1a030 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1a040 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1a050 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1a060 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1a070 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1a080 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1a090 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1a0a0 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1a0b0 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1a0c0 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1a0d0 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1a0e0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1a0f0 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1a100 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1a110 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a120 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1a130 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1a140 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
1a150 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
1a160 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
1a170 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
1a180 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
1a190 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
1a1a0 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20  e P1.  P2==1 is 
1a1b0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a1c0 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69  on.  .** P2==2 i
1a1d0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
1a1e0 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20  ormat. P2==3 is 
1a1f0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1a200 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1a210 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1a220 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1a230 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1a240 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1a250 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1a260 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1a270 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1a280 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1a290 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1a2a0 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1a2b0 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1a2c0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1a2d0 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1a2e0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
1a2f0 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
1a300 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
1a310 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1a320 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1a330 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a340 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1a350 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a360 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a370 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1a380 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1a390 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
1a3a0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
1a3b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1a3c0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
1a3d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1a3e0 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1a3f0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
1a400 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1a410 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
1a420 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1a430 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
1a440 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
1a450 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
1a460 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
1a470 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
1a480 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
1a490 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
1a4a0 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
1a4b0 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
1a4c0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
1a4d0 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
1a4e0 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
1a4f0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
1a500 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
1a510 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
1a520 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
1a530 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
1a540 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
1a550 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
1a560 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
1a570 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
1a580 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
1a590 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
1a5a0 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
1a5b0 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
1a5c0 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
1a5d0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
1a5e0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1a5f0 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
1a600 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
1a610 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
1a620 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
1a630 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
1a640 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
1a650 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
1a660 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
1a670 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
1a680 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
1a690 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
1a6a0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
1a6b0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
1a6c0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
1a6d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1a6e0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
1a6f0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1a700 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1a710 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1a720 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
1a730 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
1a740 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1a750 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1a760 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
1a770 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
1a780 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a790 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1a7a0 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
1a7b0 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
1a7c0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
1a7d0 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
1a7e0 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
1a7f0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
1a800 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
1a810 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
1a820 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
1a830 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
1a840 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
1a850 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
1a860 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
1a870 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
1a880 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
1a890 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
1a8a0 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
1a8b0 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
1a8c0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
1a8d0 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
1a8e0 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
1a8f0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
1a900 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1a910 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
1a920 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
1a930 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
1a940 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
1a950 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
1a960 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
1a970 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
1a980 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
1a990 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
1a9a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
1a9b0 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
1a9c0 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
1a9d0 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
1a9e0 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
1a9f0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
1aa00 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1aa10 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
1aa20 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
1aa30 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
1aa40 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
1aa50 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
1aa60 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
1aa70 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
1aa80 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1aa90 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
1aaa0 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
1aab0 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
1aac0 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
1aad0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
1aae0 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
1aaf0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
1ab00 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
1ab10 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
1ab20 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
1ab30 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
1ab40 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1ab50 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1ab60 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1ab70 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1ab80 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1ab90 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1aba0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1abb0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1abc0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1abd0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1abe0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1abf0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1ac00 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1ac10 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1ac20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1ac30 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1ac40 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1ac50 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1ac60 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1ac70 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1ac80 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1ac90 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1aca0 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1acb0 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1acc0 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1acd0 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1ace0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1acf0 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1ad00 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1ad10 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65  x opcode works e
1ad20 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64  xactly like Read
1ad30 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74  Open except that
1ad40 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1ad50 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1ad60 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1ad70 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77  s already open w
1ad80 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  ith a root page.
1ad90 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20  ** number of P2 
1ada0 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1adb0 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1adc0 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1add0 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1ade0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1adf0 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1ae00 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1ae10 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1ae20 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1ae30 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1ae40 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50  P5==0 and with P
1ae50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f  4 being.** a P4_
1ae60 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1ae70 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1ae80 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1ae90 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a  be the same as.*
1aea0 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  * every other Re
1aeb0 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1aec0 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1aed0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a   cursor number..
1aee0 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70  **.** See the Op
1aef0 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f  enRead opcode do
1af00 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1af10 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1af20 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
1af30 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1af40 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1af50 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1af60 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1af70 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1af80 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1af90 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1afa0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1afb0 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1afc0 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1afd0 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1afe0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1aff0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1b000 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1b010 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1b020 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1b030 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1b040 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1b050 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1b060 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1b070 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1b080 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1b090 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1b0a0 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1b0b0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1b0c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1b0d0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1b0e0 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1b0f0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1b100 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1b110 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1b120 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1b130 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1b140 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1b150 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1b160 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1b170 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1b180 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1b190 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1b1a0 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1b1b0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1b1c0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1b1d0 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1b1e0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1b1f0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1b200 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1b210 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1b220 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1b230 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1b240 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1b250 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1b260 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1b270 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1b280 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1b290 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1b2a0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1b2b0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1b2c0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1b2d0 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1b2e0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1b2f0 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1b300 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1b310 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1b320 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1b330 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1b340 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1b350 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1b360 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1b370 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1b380 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1b390 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1b3a0 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1b3b0 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1b3c0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1b3d0 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1b3e0 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1b3f0 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1b400 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1b410 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f  /.    goto open_
1b420 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1b430 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68  ;.  }.  /* If th
1b440 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20  e cursor is not 
1b450 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f  currently open o
1b460 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64  r is open on a d
1b470 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e  ifferent.  ** in
1b480 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  dex, then fall t
1b490 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f  hrough into OP_O
1b4a0 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65  penRead to force
1b4b0 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73   a reopen */.cas
1b4c0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1b4d0 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1b4e0 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f  :..  assert( (pO
1b4f0 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32  p->p5&(OPFLAG_P2
1b500 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c  ISREG|OPFLAG_BUL
1b510 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b  KCSR|OPFLAG_SEEK
1b520 45 51 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b  EQ))==pOp->p5 );
1b530 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b540 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1b550 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
1b560 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1b570 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1b580 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1b590 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1b5a0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1b5b0 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20  =OP_OpenRead || 
1b5c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1b5d0 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20  ReopenIdx.      
1b5e0 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e      || p->readOn
1b5f0 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ly==0 );..  if( 
1b600 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20  p->expired ){.  
1b610 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
1b620 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20  ORT_ROLLBACK;.  
1b630 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
1b640 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b  nField = 0;.  pK
1b650 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32  eyInfo = 0;.  p2
1b660 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44   = pOp->p2;.  iD
1b670 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  b = pOp->p3;.  a
1b680 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
1b690 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
1b6a0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1b6b0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1b6c0 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62  k, iDb) );.  pDb
1b6d0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
1b6e0 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
1b6f0 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
1b700 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
1b710 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1b720 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
1b730 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73  lag = 1;.    ass
1b740 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1b750 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1b760 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1b770 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1b780 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1b790 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1b7a0 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1b7b0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1b7c0 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1b7d0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1b7e0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1b7f0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1b800 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1b810 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1b820 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1b830 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1b840 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1b850 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
1b860 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1b870 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1b880 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1b890 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1b8a0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1b8b0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1b8c0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1b8d0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1b8e0 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1b8f0 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1b900 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1b910 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1b920 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1b930 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1b940 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1b950 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1b960 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1b970 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1b980 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1b990 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1b9a0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1b9b0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1b9c0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1b9d0 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1b9e0 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1b9f0 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1ba00 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e  on. */.    if( N
1ba10 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20  EVER(p2<2) ) {. 
1ba20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1ba30 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
1ba40 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1ba50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1ba60 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f    }.  }.  if( pO
1ba70 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1ba80 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
1ba90 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1baa0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73  pKeyInfo;.    as
1bab0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1bac0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1bad0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1bae0 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1baf0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1bb00 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b  yInfo->nField+pK
1bb10 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b  eyInfo->nXField;
1bb20 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1bb30 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1bb40 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1bb50 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1bb60 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1bb70 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1bb80 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1bb90 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1bba0 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1bbb0 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1bbc0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1bbd0 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1bbe0 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1bbf0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1bc00 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1bc10 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72  , 1);.  if( pCur
1bc20 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1bc30 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  m;.  pCur->nullR
1bc40 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e  ow = 1;.  pCur->
1bc50 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20  isOrdered = 1;. 
1bc60 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20   pCur->pgnoRoot 
1bc70 3d 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c  = p2;.  rc = sql
1bc80 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1bc90 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1bca0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1bcb0 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
1bcc0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
1bcd0 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20  yInfo;.  /* Set 
1bce0 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69  the VdbeCursor.i
1bcf0 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e  sTable variable.
1bd00 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
1bd10 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74  ns of.  ** SQLit
1bd20 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20  e used to check 
1bd30 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  if the root-page
1bd40 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65   flags were sane
1bd50 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20   at this point. 
1bd60 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64   ** and report d
1bd70 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
1bd80 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20  on if they were 
1bd90 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68  not, but this ch
1bda0 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e  eck has.  ** sin
1bdb0 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  ce moved into th
1bdc0 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20  e btree layer.  
1bdd0 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54  */  .  pCur->isT
1bde0 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79  able = pOp->p4ty
1bdf0 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a  pe!=P4_KEYINFO;.
1be00 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74  .open_cursor_set
1be10 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74  _hints:.  assert
1be20 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  ( OPFLAG_BULKCSR
1be30 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  ==BTREE_BULKLOAD
1be40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1be50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52  FLAG_SEEKEQ==BTR
1be60 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20  EE_SEEK_EQ );.  
1be70 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1be80 6f 72 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43  orHints(pCur->pC
1be90 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  ursor,.         
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1beb0 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
1bec0 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1bed0 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20  AG_SEEKEQ)));.  
1bee0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1bef0 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
1bf00 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  al P1 P2 * P4 P5
1bf10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1bf20 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f  olumn=P2.**.** O
1bf30 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1bf40 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
1bf50 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
1bf60 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
1bf70 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
1bf80 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
1bf90 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1bfa0 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
1bfb0 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
1bfc0 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
1bfd0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1bfe0 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
1bff0 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
1c000 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
1c010 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c020 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
1c030 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1c040 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
1c050 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
1c060 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
1c070 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
1c080 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
1c090 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1c0a0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
1c0b0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1c0c0 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
1c0d0 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
1c0e0 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
1c0f0 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  x..**.** The P5 
1c100 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65  parameter can be
1c110 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42   a mask of the B
1c120 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66  TREE_* flags def
1c130 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65  ined.** in btree
1c140 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73  .h.  These flags
1c150 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73   control aspects
1c160 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   of the operatio
1c170 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65  n of.** the btre
1c180 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d  e.  The BTREE_OM
1c190 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42  IT_JOURNAL and B
1c1a0 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67  TREE_SINGLE flag
1c1b0 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61  s are.** added a
1c1c0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f  utomatically..*/
1c1d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c1e0 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
1c1f0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
1c200 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1c210 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1c220 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
1c230 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  as OP_OpenEpheme
1c240 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a  ral.  It has a.*
1c250 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  * different name
1c260 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20   to distinguish 
1c270 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73  its use.  Tables
1c280 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
1c290 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  * by this opcode
1c2a0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
1c2b0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  r automatically 
1c2c0 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e  created transien
1c2d0 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20  t.** indices in 
1c2e0 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  joins..*/.case O
1c2f0 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a  P_OpenAutoindex:
1c300 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70   .case OP_OpenEp
1c310 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62  hemeral: {.  Vdb
1c320 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1c330 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1c340 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  o;..  static con
1c350 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1c360 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1c370 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1c380 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1c390 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1c3a0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1c3b0 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1c3c0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1c3d0 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1c3e0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1c3f0 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73  ANSIENT_DB;.  as
1c400 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c410 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c420 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1c430 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1c440 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1c450 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a  Op->p2, -1, 1);.
1c460 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1c470 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1c480 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1c490 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1c4a0 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  al = 1;.  rc = s
1c4b0 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1c4c0 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1c4d0 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20   &pCx->pBt, .   
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1c500 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1c510 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1c520 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1c530 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1c540 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1c550 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1c560 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
1c570 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
1c580 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c590 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1c5a0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1c5b0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1c5c0 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
1c5d0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1c5e0 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1c5f0 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1c600 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1c610 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
1c620 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
1c630 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
1c640 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
1c650 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
1c660 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1c670 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1c680 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1c690 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1c6a0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65   */.    if( (pKe
1c6b0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1c6c0 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
1c6d0 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
1c6e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1c6f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1c700 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
1c710 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c720 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
1c730 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
1c740 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1c750 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1c760 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1c770 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1c780 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1c790 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1c7a0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1c7b0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1c7c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1c7d0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1c7e0 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1c7f0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1c800 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1c810 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1c820 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1c830 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65  Bt, pgno, 1, pKe
1c840 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72  yInfo, pCx->pCur
1c850 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1c860 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1c870 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1c880 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1c890 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1c8a0 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f  Cx->pBt, MASTER_
1c8b0 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d  ROOT, 1, 0, pCx-
1c8c0 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  >pCursor);.     
1c8d0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1c8e0 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  1;.    }.  }.  p
1c8f0 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1c900 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1c910 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72  UNORDERED);.  br
1c920 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c930 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1c940 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1c950 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1c960 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1c970 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1c980 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1c990 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1c9a0 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1c9b0 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1c9c0 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1c9d0 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1c9e0 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1c9f0 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1ca00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d  ..**.** If argum
1ca10 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65  ent P3 is non-ze
1ca20 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69  ro, then it indi
1ca30 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73  cates that the s
1ca40 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73  orter may.** ass
1ca50 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c  ume that a stabl
1ca60 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69  e sort consideri
1ca70 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20  ng the first P3 
1ca80 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a  fields of each.*
1ca90 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69  * key is suffici
1caa0 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74  ent to produce t
1cab0 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75  he required resu
1cac0 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lts..*/.case OP_
1cad0 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20  SorterOpen: {.  
1cae0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1caf0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1cb00 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1cb10 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1cb20 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1cb30 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1cb40 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1cb50 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1cb60 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1cb70 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1cb80 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1cb90 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1cba0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1cbb0 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1cbc0 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1cbd0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1cbe0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1cbf0 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1cc00 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29  b, pOp->p3, pCx)
1cc10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1cc20 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1cc30 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20  eTest P1 P2 * * 
1cc40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1cc50 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  f( cursor[P1].ct
1cc60 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a  r++ ) pc = P2.**
1cc70 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
1cc80 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68  er cursor. If th
1cc90 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74  e sequence count
1cca0 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
1ccb0 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f  zero, jump.** to
1ccc0 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20   P2. Regardless 
1ccd0 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
1cce0 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
1ccf0 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ken, increment t
1cd00 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e  he.** the sequen
1cd10 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  ce value..*/.cas
1cd20 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73  e OP_SequenceTes
1cd30 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
1cd40 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1cd50 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1cd60 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1cd70 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1cd80 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1cd90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 53 6f   assert( pC->pSo
1cda0 72 74 65 72 20 29 3b 0a 20 20 69 66 28 20 28 70  rter );.  if( (p
1cdb0 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d  C->seqCount++)==
1cdc0 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
1cdd0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
1cde0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1cdf0 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1ce00 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1ce10 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c  Synopsis: P3 col
1ce20 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a  umns in r[P2].**
1ce30 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1ce40 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1ce50 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1ce60 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1ce70 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1ce80 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1ce90 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1cea0 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e  e row is the con
1ceb0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1cec0 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1ced0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1cee0 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1cef0 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1cf00 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1cf10 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1cf20 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1cf30 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1cf40 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1cf50 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1cf60 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1cf70 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1cf80 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1cf90 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1cfa0 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1cfb0 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1cfc0 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1cfd0 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1cfe0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1cff0 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1d000 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1d010 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1d020 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1d030 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1d040 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1d050 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1d060 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1d070 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1d080 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1d090 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1d0a0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1d0b0 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1d0c0 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1d0d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1d0e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d0f0 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p3>=0 );.  pCx 
1d100 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d110 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1d120 2d 3e 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  ->p3, -1, 0);.  
1d130 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1d140 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1d150 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1d160 70 43 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65  pCx->pseudoTable
1d170 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1d180 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1d190 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
1d1a0 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65  ->p5==0 );.  bre
1d1b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1d1c0 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
1d1d0 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
1d1e0 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
1d1f0 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
1d200 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
1d210 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
1d220 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1d230 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
1d240 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
1d250 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
1d260 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d270 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d280 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
1d290 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1d2a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
1d2b0 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
1d2c0 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
1d2d0 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
1d2e0 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1d2f0 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70  _USED_MASK./* Op
1d300 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65  code: ColumnsUse
1d310 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  d P1 * * P4 *.**
1d320 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1d330 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73  (which only exis
1d340 74 73 20 69 66 20 53 51 4c 69 74 65 20 77 61 73  ts if SQLite was
1d350 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a   compiled with.*
1d360 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1d370 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1d380 29 20 69 64 65 6e 74 69 66 69 65 73 20 77 68 69  ) identifies whi
1d390 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  ch columns of th
1d3a0 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  e.** table or in
1d3b0 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50  dex for cursor P
1d3c0 31 20 61 72 65 20 75 73 65 64 2e 20 20 50 34 20  1 are used.  P4 
1d3d0 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  is a 64-bit inte
1d3e0 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34  ger.** (P4_INT64
1d3f0 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 66  ) in which the f
1d400 69 72 73 74 20 36 33 20 62 69 74 73 20 61 72 65  irst 63 bits are
1d410 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66   one for each of
1d420 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33   the.** first 63
1d430 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
1d440 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74  table or index t
1d450 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79  hat are actually
1d460 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1d470 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67  cursor.  The hig
1d480 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73 20 73  h-order bit is s
1d490 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  et if any column
1d4a0 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34   after.** the 64
1d4b0 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63  th is used..*/.c
1d4c0 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73  ase OP_ColumnsUs
1d4d0 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ed: {.  VdbeCurs
1d4e0 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70  or *pC;.  pC = p
1d4f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d500 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d510 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 2d  pCursor );.  pC-
1d520 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36  >maskUsed = *(u6
1d530 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  4*)pOp->p4.pI64;
1d540 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
1d550 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
1d560 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50  eekGE P1 P2 P3 P
1d570 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1d580 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1d590 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1d5a0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1d5b0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1d5c0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1d5d0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1d5e0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1d5f0 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1d600 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1d610 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1d620 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1d630 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1d640 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1d650 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1d660 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1d670 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1d680 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1d690 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1d6a0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1d6b0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1d6c0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1d6d0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1d6e0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1d6f0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1d700 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1d710 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1d720 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1d730 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1d740 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1d750 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1d760 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1d770 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1d780 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1d790 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1d7a0 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
1d7b0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
1d7c0 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
1d7d0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
1d7e0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1d7f0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1d800 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
1d810 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a   not Prev..**.**
1d820 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1d830 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1d840 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  Lt, SeekGt, Seek
1d850 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1d860 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50 33   SeekGT P1 P2 P3
1d870 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1d880 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1d890 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1d8a0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1d8b0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1d8c0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1d8d0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1d8e0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1d8f0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1d900 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1d910 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1d920 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1d930 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1d940 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1d950 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d960 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1d970 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1d980 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1d990 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1d9a0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1d9b0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1d9c0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1d9d0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1d9e0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
1d9f0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1da00 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1da10 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a   greater than .*
1da20 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
1da30 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1da40 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1da50 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1da60 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1da70 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1da80 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
1da90 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1daa0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
1dab0 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
1dac0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1dad0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1dae0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1daf0 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
1db00 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1db10 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1db20 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
1db30 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
1db40 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50  Opcode: SeekLT P
1db50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a  1 P2 P3 P4 * .**
1db60 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1db70 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1db80 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1db90 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1dba0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1dbb0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1dbc0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1dbd0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1dbe0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1dbf0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1dc00 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1dc10 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1dc20 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1dc30 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1dc40 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1dc50 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1dc60 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1dc70 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1dc80 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1dc90 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1dca0 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1dcb0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1dcc0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
1dcd0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1dce0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1dcf0 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a  ords less than .
1dd00 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1dd10 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1dd20 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1dd30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1dd40 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1dd50 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1dd60 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
1dd70 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
1dd80 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
1dd90 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
1dda0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1ddb0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1ddc0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1ddd0 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
1dde0 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  t..**.** See als
1ddf0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1de00 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b  nd, SeekGt, Seek
1de10 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1de20 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20   Opcode: SeekLE 
1de30 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1de40 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1de50 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1de60 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1de70 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1de80 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1de90 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1dea0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1deb0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1dec0 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1ded0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1dee0 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1def0 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1df00 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1df10 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1df20 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1df30 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1df40 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1df50 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1df60 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1df70 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
1df80 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1df90 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1dfa0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
1dfb0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1dfc0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1dfd0 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1dfe0 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  .** less than or
1dff0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1e000 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1e010 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1e020 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1e030 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1e040 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1e050 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1e060 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
1e070 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
1e080 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
1e090 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
1e0a0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1e0b0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1e0c0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
1e0d0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
1e0e0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1e0f0 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
1e100 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1e110 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
1e120 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLT:         /* 
1e130 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1e140 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20  e OP_SeekLE:    
1e150 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1e160 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1e170 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kGE:         /* 
1e180 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1e190 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20  e OP_SeekGT: {  
1e1a0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1e1b0 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a  3 */.  int res;.
1e1c0 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65    int oc;.  Vdbe
1e1d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e  Cursor *pC;.  Un
1e1e0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1e1f0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1e200 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f  i64 iKey;      /
1e210 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1e220 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1e230 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e240 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e250 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e260 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e270 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
1e280 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e290 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1e2a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1e2b0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
1e2c0 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
1e2d0 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f  ( OP_SeekLE == O
1e2e0 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20  P_SeekLT+1 );.  
1e2f0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1e300 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32  E == OP_SeekLT+2
1e310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1e320 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65  _SeekGT == OP_Se
1e330 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLT+3 );.  asse
1e340 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
1e350 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
1e360 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1e370 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  oc = pOp->opc
1e380 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ode;.  pC->nullR
1e390 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  ow = 0;.#ifdef S
1e3a0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1e3b0 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
1e3c0 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a  opcode;.#endif..
1e3d0 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f    /* For a curso
1e3e0 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  r with the BTREE
1e3f0 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f  _SEEK_EQ hint, o
1e400 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47  nly the OP_SeekG
1e410 45 20 61 6e 64 0a 20 20 2a 2a 20 4f 50 5f 53 65  E and.  ** OP_Se
1e420 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65  ekLE opcodes are
1e430 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68   allowed, and th
1e440 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65  ese must be imme
1e450 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64  diately followed
1e460 0a 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49  .  ** by an OP_I
1e470 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54  dxGT or OP_IdxLT
1e480 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74   opcode, respect
1e490 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20  ively, with the 
1e4a0 73 61 6d 65 20 6b 65 79 2e 0a 20 20 2a 2f 0a 23  same key..  */.#
1e4b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1e4c0 55 47 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  UG.  if( sqlite3
1e4d0 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69  BtreeCursorHasHi
1e4e0 6e 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  nt(pC->pCursor, 
1e4f0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29  BTREE_SEEK_EQ) )
1e500 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
1e510 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65  p->opcode==OP_Se
1e520 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  ekGE || pOp->opc
1e530 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29  ode==OP_SeekLE )
1e540 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
1e550 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
1e560 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
1e570 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
1e580 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1e590 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30  pOp[1].p1==pOp[0
1e5a0 5d 2e 70 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ].p1 );.    asse
1e5b0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70  rt( pOp[1].p2==p
1e5c0 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20  Op[0].p2 );.    
1e5d0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
1e5e0 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
1e5f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1e600 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e  1].p4.i==pOp[0].
1e610 70 34 2e 69 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  p4.i );.  }.#end
1e620 69 66 0a 20 0a 20 20 69 66 28 20 70 43 2d 3e 69  if. .  if( pC->i
1e630 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
1e640 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1e650 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1e660 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1e670 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1e680 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1e690 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1e6a0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1e6b0 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1e6c0 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1e6d0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1e6e0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
1e6f0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1e700 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
1e710 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
1e720 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
1e730 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
1e740 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
1e750 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1e760 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
1e770 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
1e780 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1e790 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
1e7a0 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1e7b0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1e7c0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1e7d0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1e7e0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
1e7f0 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
1e800 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
1e810 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
1e820 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
1e830 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1e840 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1e850 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1e860 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1e870 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
1e880 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1e890 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1e8a0 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1e8b0 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1e8c0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1e8d0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1e8e0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1e8f0 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1e900 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1e910 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70  (1,2); goto jump
1e920 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
1e930 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a  break;.      }..
1e940 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1e950 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1e960 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  ey is larger tha
1e970 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1e980 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1e990 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1e9a0 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20  te >= for > and 
1e9b0 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69  < for <=. e.g. i
1e9c0 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72  f the search ter
1e9d0 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e  m.      ** is 4.
1e9e0 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  9 and the intege
1e9f0 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  r approximation 
1ea00 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  5:.      **.    
1ea10 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e    **        (x >
1ea20 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20    4.9)    ->    
1ea30 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20   (x >= 5).      
1ea40 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20  **        (x <= 
1ea50 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1ea60 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f  x <  5).      */
1ea70 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d  .      if( pIn3-
1ea80 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r<(double)iKe
1ea90 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1eaa0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d  ert( OP_SeekGE==
1eab0 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b  (OP_SeekGT-1) );
1eac0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1ead0 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f   OP_SeekLT==(OP_
1eae0 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20  SeekLE-1) );.   
1eaf0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1eb00 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31  _SeekLE & 0x0001
1eb10 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1eb20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1eb30 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1eb40 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1eb50 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d   & 0x0001) ) oc-
1eb60 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
1eb70 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1eb80 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1eb90 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74  s smaller than t
1eba0 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1ebb0 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1ebc0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1ebd0 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66  <= for < and > f
1ebe0 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20  or >=.  */.     
1ebf0 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e   else if( pIn3->
1ec00 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r>(double)iKey
1ec10 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1ec20 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28  rt( OP_SeekLE==(
1ec30 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a  OP_SeekLT+1) );.
1ec40 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ec50 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53  OP_SeekGT==(OP_S
1ec60 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20  eekGE+1) );.    
1ec70 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1ec80 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
1ec90 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30  ==(OP_SeekGE & 0
1eca0 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1ecb0 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1ecc0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20  01)==(OP_SeekLT 
1ecd0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b  & 0x0001) ) oc++
1ece0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
1ecf0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1ed00 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1ed10 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
1ed20 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
1ed30 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  0, &res);.    pC
1ed40 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
1ed50 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
1ed60 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
1ed70 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1ed80 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1ed90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1eda0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1edb0 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c  }else{.    nFiel
1edc0 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1edd0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1ede0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1edf0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1ee00 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
1ee10 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1ee20 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1ee30 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
1ee40 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54  Field;..    /* T
1ee50 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20  he next line of 
1ee60 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73  code computes as
1ee70 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66   follows, only f
1ee80 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20  aster:.    **   
1ee90 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
1eea0 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
1eeb0 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20  LE ){.    **    
1eec0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1eed0 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c  -1;.    **   }el
1eee0 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72  se{.    **     r
1eef0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31  .default_rc = +1
1ef00 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20  ;.    **   }.   
1ef10 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   */.    r.defaul
1ef20 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63  t_rc = ((1 & (oc
1ef30 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f   - OP_SeekLT)) ?
1ef40 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61   -1 : +1);.    a
1ef50 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1ef60 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGT || r.defaul
1ef70 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
1ef80 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1ef90 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekLE || r.defau
1efa0 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
1efb0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1efc0 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61  SeekGE || r.defa
1efd0 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20  ult_rc==+1 );.  
1efe0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1eff0 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66  _SeekLT || r.def
1f000 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a  ault_rc==+1 );..
1f010 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d      r.aMem = &aM
1f020 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
1f030 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1f040 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
1f050 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
1f060 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
1f070 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
1f080 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
1f090 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f  if.    ExpandBlo
1f0a0 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72  b(r.aMem);.    r
1f0b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1f0c0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1f0d0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20  C->pCursor, &r, 
1f0e0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  0, 0, &res);.   
1f0f0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1f100 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1f110 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f120 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ror;.    }.  }. 
1f130 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1f140 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
1f150 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
1f160 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
1f170 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
1f180 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1f190 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
1f1a0 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
1f1b0 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  E ){  assert( oc
1f1c0 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f  ==OP_SeekGE || o
1f1d0 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a  c==OP_SeekGT );.
1f1e0 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
1f1f0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
1f200 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20  OP_SeekGT) ){.  
1f210 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1f220 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1f230 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75  treeNext(pC->pCu
1f240 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1f250 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1f260 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1f270 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1f280 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1f290 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a   res = 0;.    }.
1f2a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
1f2b0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1f2c0 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  LT || oc==OP_See
1f2d0 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kLE );.    if( r
1f2e0 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
1f2f0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  && oc==OP_SeekLT
1f300 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
1f310 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
1f320 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
1f330 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ous(pC->pCursor,
1f340 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1f350 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1f360 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1f370 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1f380 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72  else{.      /* r
1f390 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1f3a0 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1f3b0 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1f3c0 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1f3d0 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
1f3e0 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
1f3f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20     */.      res 
1f400 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1f410 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
1f420 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
1f430 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
1f440 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
1f450 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
1f460 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67  if( res ){.    g
1f470 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
1f480 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1f490 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1f4a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1f4b0 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
1f4c0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P2].**.** P1 
1f4d0 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1f4e0 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1f4f0 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1f500 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1f510 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1f520 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1f530 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1f540 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1f550 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1f560 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1f570 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1f580 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1f590 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1f5a0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1f5b0 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1f5c0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1f5d0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1f5e0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1f5f0 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1f600 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1f610 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1f620 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1f630 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1f640 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1f650 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1f660 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f670 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f680 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1f690 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1f6a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1f6b0 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e  sTable );.  pC->
1f6c0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1f6d0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1f6e0 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  >p2];.  pC->move
1f6f0 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1f700 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1f710 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65  In2);.  pC->defe
1f720 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1f730 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f    break;.}.  ../
1f740 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
1f750 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1f760 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1f770 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1f780 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1f790 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1f7a0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1f7b0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1f7c0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1f7d0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1f7e0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1f7f0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1f800 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1f810 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
1f820 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1f830 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1f840 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1f850 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1f860 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
1f870 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1f880 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1f890 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1f8a0 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
1f8b0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1f8c0 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
1f8d0 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
1f8e0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1f8f0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1f900 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1f910 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
1f920 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
1f930 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
1f940 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
1f950 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
1f960 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
1f970 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
1f980 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1f990 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
1f9a0 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
1f9b0 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
1f9c0 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
1f9d0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1f9e0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1f9f0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1fa00 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1fa10 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1fa20 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1fa30 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1fa40 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1fa50 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1fa60 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1fa70 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1fa80 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1fa90 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1faa0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1fab0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1fac0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1fad0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1fae0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
1faf0 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
1fb00 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1fb10 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1fb20 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
1fb30 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
1fb40 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
1fb50 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
1fb60 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
1fb70 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
1fb80 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
1fb90 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1fba0 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
1fbb0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1fbc0 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
1fbd0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1fbe0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
1fbf0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1fc00 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1fc10 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
1fc20 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
1fc30 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
1fc40 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1fc50 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
1fc60 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
1fc70 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
1fc80 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
1fc90 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1fca0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1fcb0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
1fcc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
1fcd0 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
1fce0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1fcf0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1fd00 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1fd10 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1fd20 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1fd30 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1fd40 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1fd50 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1fd60 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1fd70 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1fd80 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1fd90 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1fda0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1fdb0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1fdc0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1fdd0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1fde0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1fdf0 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e  * contains any N
1fe00 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  ULL value, jump 
1fe10 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1fe20 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73  2.  If all terms
1fe30 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
1fe40 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74  d are not-NULL t
1fe50 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64  hen a check is d
1fe60 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  one to determine
1fe70 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74   if any row in t
1fe80 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62  he.** P1 index b
1fe90 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68  tree has a match
1fea0 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20  ing key prefix. 
1feb0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1fec0 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a   matches, jump.*
1fed0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
1fee0 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69   P2.  If there i
1fef0 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20  s a match, fall 
1ff00 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76  through and leav
1ff10 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73  e the P1.** curs
1ff20 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
1ff30 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e  he matching row.
1ff40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1ff50 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  de is similar to
1ff60 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74   OP_NotFound wit
1ff70 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  h the exceptions
1ff80 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61   that the.** bra
1ff90 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61  nch is always ta
1ffa0 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20  ken if any part 
1ffb0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65  of the search ke
1ffc0 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  y input is NULL.
1ffd0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1ffe0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1fff0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
20000 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
20010 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
20020 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
20030 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
20040 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
20050 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
20060 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
20070 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
20080 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
20090 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
200a0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
200b0 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
200c0 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
200d0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
200e0 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
200f0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
20100 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
20110 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
20120 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
20130 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
20140 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70  ;.  int takeJump
20150 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
20160 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
20170 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
20180 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
20190 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
201a0 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
201b0 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
201c0 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
201d0 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
201e0 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
201f0 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*4 + 7];..#if
20200 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
20210 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
20220 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
20230 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
20240 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
20250 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
20260 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20270 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20290 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
202a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
202b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
202c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
202d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
202e0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
202f0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
20300 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
20310 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
20320 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
20330 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
20340 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
20350 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20  e==0 );.  pFree 
20360 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  = 0;.  if( pOp->
20370 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e  p4.i>0 ){.    r.
20380 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
20390 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
203a0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
203b0 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d  ->p4.i;.    r.aM
203c0 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66  em = pIn3;.    f
203d0 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46  or(ii=0; ii<r.nF
203e0 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
203f0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
20400 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69  Valid(&r.aMem[ii
20410 5d 29 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61  ]) );.      Expa
20420 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69  ndBlob(&r.aMem[i
20430 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  i]);.#ifdef SQLI
20440 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69  TE_DEBUG.      i
20450 66 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52  f( ii ) REGISTER
20460 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69  _TRACE(pOp->p3+i
20470 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b  i, &r.aMem[ii]);
20480 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
20490 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
204a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64    }else{.    pId
204b0 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
204c0 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
204d0 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70  ecord(.        p
204e0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
204f0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
20500 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
20510 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28 20 70      );.    if( p
20520 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
20530 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
20540 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
20550 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
20560 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49     ExpandBlob(pI
20570 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  n3);.    sqlite3
20580 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
20590 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
205a0 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
205b0 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
205c0 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
205d0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65  t_rc = 0;.  take
205e0 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20  Jump = 0;.  if( 
205f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
20600 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
20610 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
20620 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
20630 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
20640 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
20650 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
20660 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
20670 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
20680 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
20690 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
206a0 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
206b0 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69   ii<pIdxKey->nFi
206c0 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
206d0 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61    if( pIdxKey->a
206e0 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
206f0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
20700 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31      takeJump = 1
20710 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
20720 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
20730 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
20740 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
20750 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72  cked(pC->pCursor
20760 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
20770 20 26 72 65 73 29 3b 0a 20 20 73 71 6c 69 74 65   &res);.  sqlite
20780 33 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65  3DbFree(db, pFre
20790 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  e);.  if( rc!=SQ
207a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62  LITE_OK ){.    b
207b0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  reak;.  }.  pC->
207c0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
207d0 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74  ;.  alreadyExist
207e0 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
207f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d  pC->nullRow = 1-
20800 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
20810 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
20820 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
20830 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20840 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
20850 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
20860 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62  Found ){.    Vdb
20870 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72  eBranchTaken(alr
20880 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29  eadyExists!=0,2)
20890 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64  ;.    if( alread
208a0 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a  yExists ) goto j
208b0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
208c0 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
208d0 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70  chTaken(takeJump
208e0 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d  ||alreadyExists=
208f0 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74  =0,2);.    if( t
20900 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65  akeJump || !alre
20910 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f  adyExists ) goto
20920 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
20930 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
20940 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
20950 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
20960 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
20970 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
20980 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
20990 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
209a0 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
209b0 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
209c0 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50  ger.** keys).  P
209d0 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 is an integer 
209e0 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f  rowid.  If P1 do
209f0 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
20a00 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20   record with.** 
20a10 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
20a20 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20a30 6f 20 50 32 2e 20 20 49 66 20 50 31 20 64 6f 65  o P2.  If P1 doe
20a40 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
20a50 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77 69 64  rd.** with rowid
20a60 20 50 33 20 74 68 65 6e 20 6c 65 61 76 65 20 74   P3 then leave t
20a70 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
20a80 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
20a90 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20 74 68  d and fall.** th
20aa0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
20ab0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
20ac0 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
20ad0 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
20ae0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
20af0 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
20b00 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
20b10 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
20b20 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
20b30 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
20b40 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20b50 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
20b60 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
20b70 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
20b80 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
20b90 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
20ba0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
20bb0 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
20bc0 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
20bd0 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
20be0 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
20bf0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
20c00 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  und, NoConflict.
20c10 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
20c20 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
20c30 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
20c40 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20c50 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
20c60 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
20c70 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49   u64 iKey;..  pI
20c80 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
20c90 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
20ca0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
20cb0 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
20cc0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
20cd0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
20ce0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
20cf0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
20d00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
20d10 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
20d20 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
20d30 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  kOp = 0;.#endif.
20d40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
20d50 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
20d60 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
20d70 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
20d80 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
20d90 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
20da0 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d  sr!=0 );.  res =
20db0 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e   0;.  iKey = pIn
20dc0 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73  3->u.i;.  rc = s
20dd0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
20de0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
20df0 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
20e00 73 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  s);.  pC->moveto
20e10 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
20e20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
20e30 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75  lete */.  pC->nu
20e40 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
20e50 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20e60 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
20e70 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20e80 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
20e90 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
20ea0 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  );.  pC->seekRes
20eb0 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28  ult = res;.  if(
20ec0 20 72 65 73 21 3d 30 20 29 20 67 6f 74 6f 20 6a   res!=0 ) goto j
20ed0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
20ee0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
20ef0 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32  : Sequence P1 P2
20f00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
20f10 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72  is: r[P2]=cursor
20f20 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a  [P1].ctr++.**.**
20f30 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61   Find the next a
20f40 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63  vailable sequenc
20f50 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72  e number for cur
20f60 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65  sor P1..** Write
20f70 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   the sequence nu
20f80 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74  mber into regist
20f90 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  er P2..** The se
20fa0 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e  quence number on
20fb0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69   the cursor is i
20fc0 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72  ncremented after
20fd0 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63   this.** instruc
20fe0 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20  tion.  .*/.case 
20ff0 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20  OP_Sequence: {  
21000 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
21010 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
21020 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
21030 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
21040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
21050 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
21060 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
21070 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
21080 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
21090 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
210a0 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b  >p1]->seqCount++
210b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
210c0 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77  * Opcode: NewRow
210d0 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
210e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
210f0 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47  2]=rowid.**.** G
21100 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
21110 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
21120 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
21130 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
21140 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
21150 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
21160 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
21170 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
21180 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
21190 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
211a0 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
211b0 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
211c0 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
211d0 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
211e0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
211f0 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
21200 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
21210 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
21220 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44  frame of this VD
21230 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a  BE that holds .*
21240 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  * the largest pr
21250 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
21260 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
21270 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20  . No new record 
21280 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61  numbers are.** a
21290 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
212a0 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  s than this valu
212b0 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  e. When this val
212c0 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
212d0 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53  aximum, .** an S
212e0 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
212f0 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
21300 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
21310 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
21320 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
21330 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
21340 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
21350 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
21360 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
21370 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
21380 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
21390 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
213a0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
213b0 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20  ut2 */.  i64 v; 
213c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213d0 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64  /* The new rowid
213e0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
213f0 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20   *pC;        /* 
21400 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20  Cursor of table 
21410 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72  to get the new r
21420 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65  owid */.  int re
21430 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
21440 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e   /* Result of an
21450 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
21460 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  t() */.  int cnt
21470 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21480 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69  /* Counter to li
21490 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  mit the number o
214a0 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20  f searches */.  
214b0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
214c0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
214d0 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65  er holding large
214e0 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54  st rowid for AUT
214f0 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
21500 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
21510 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66  e;     /* Root f
21520 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a  rame of VDBE */.
21530 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20  .  v = 0;.  res 
21540 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  = 0;.  pOut = ou
21550 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
21560 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
21570 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21580 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21590 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
215a0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
215b0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
215c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
215d0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b  Cursor!=0 );.  {
215e0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
215f0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
21600 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
21610 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
21620 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
21630 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
21640 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
21650 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
21660 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
21670 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
21680 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
21690 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
216a0 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
216b0 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
216c0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
216d0 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
216e0 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
216f0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
21700 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
21710 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
21720 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
21730 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
21740 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
21750 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
21760 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
21770 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
21780 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
21790 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
217a0 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
217b0 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
217c0 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
217d0 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
217e0 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
217f0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
21800 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
21810 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
21820 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
21830 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
21840 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
21850 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
21860 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
21870 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
21880 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
21890 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
218a0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
218b0 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
218c0 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
218d0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
218e0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
218f0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
21900 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
21910 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
21920 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
21930 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
21940 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
21950 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
21960 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
21970 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
21980 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
21990 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
219a0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
219b0 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
219c0 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
219d0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
219e0 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
219f0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
21a00 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
21a10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21a20 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
21a30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
21a40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21a50 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
21a60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21a70 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
21a80 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
21a90 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
21aa0 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
21ab0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
21ac0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
21ad0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
21ae0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
21af0 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  C->pCursor) );. 
21b00 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
21b10 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
21b20 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
21b30 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
21b40 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
21b50 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66  );   /* Cannot f
21b60 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74  ail following Bt
21b70 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20  reeLast() */.   
21b80 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f       if( v>=MAX_
21b90 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
21ba0 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
21bb0 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
21bc0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
21bd0 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
21be0 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
21bf0 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
21c00 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66      }.    }..#if
21c10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
21c20 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
21c30 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
21c40 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72  {.      /* Asser
21c50 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
21c60 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
21c70 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
21c80 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
21c90 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72        if( p->pFr
21ca0 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ame ){.        f
21cb0 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
21cc0 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
21cd0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
21ce0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
21cf0 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
21d00 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
21d10 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
21d20 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
21d30 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
21d40 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
21d50 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
21d60 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
21d70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  3];.      }else{
21d80 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
21d90 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
21da0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
21db0 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
21dc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
21dd0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
21de0 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
21df0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
21e00 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
21e10 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
21e20 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
21e30 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
21e40 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
21e50 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
21e60 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
21e70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
21e80 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
21e90 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
21ea0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
21eb0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
21ec0 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
21ed0 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
21ee0 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
21ef0 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
21f00 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
21f10 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
21f20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
21f30 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
21f40 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36  * IMP: R-12275-6
21f50 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20  1338 */.        
21f60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21f70 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
21f80 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
21f90 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
21fa0 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
21fb0 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
21fc0 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
21fd0 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
21fe0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
21ff0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
22000 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
22010 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
22020 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
22030 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
22040 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
22050 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
22060 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
22070 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
22080 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
22090 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
220a0 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
220b0 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
220c0 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
220d0 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
220e0 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
220f0 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
22100 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
22110 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
22120 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
22130 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
22140 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
22150 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
22160 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
22170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22180 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
22190 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
221a0 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
221b0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
221c0 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
221d0 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
221e0 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
221f0 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
22200 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
22210 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
22220 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
22230 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
22240 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
22250 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
22260 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
22270 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222a0 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
222b0 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
222c0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
222d0 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
222e0 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
222f0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ));.      if( rc
22300 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
22310 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
22320 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
22330 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
22340 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
22350 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
22360 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
22370 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
22380 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
22390 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
223a0 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
223b0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
223c0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
223d0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
223e0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
223f0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
22400 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
22410 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
22420 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
22430 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
22440 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d  r[P3] data=r[P2]
22450 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
22460 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
22470 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
22480 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
22490 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
224a0 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
224b0 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
224c0 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
224d0 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
224e0 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
224f0 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
22500 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
22510 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
22520 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
22530 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
22540 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
22550 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
22560 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
22570 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22580 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
22590 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
225a0 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
225b0 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
225c0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
225d0 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
225e0 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
225f0 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
22600 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
22610 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
22620 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
22630 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
22640 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
22650 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
22660 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
22670 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
22680 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
22690 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
226a0 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
226b0 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68  is set and if th
226c0 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
226d0 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65  he last seek ope
226e0 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78  ration (OP_NotEx
226f0 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63 63  ists) was a succ
22700 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  ess, then this.*
22710 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c  * operation will
22720 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20   not attempt to 
22730 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72  find the appropr
22740 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20  iate row before 
22750 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73  doing.** the ins
22760 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73  ert but will ins
22770 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74  tead overwrite t
22780 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20  he row that the 
22790 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72  cursor is.** cur
227a0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
227b0 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c  to.  Presumably,
227c0 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f   the prior OP_No
227d0 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a  tExists opcode.*
227e0 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70 6f  * has already po
227f0 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72  sitioned the cur
22800 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20 20  sor correctly.  
22810 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d  This is an optim
22820 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20  ization.** that 
22830 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61 6e  boosts performan
22840 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20 72  ce by avoiding r
22850 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a  edundant seeks..
22860 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22870 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
22880 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  g is set, then t
22890 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61  his opcode is pa
228a0 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41  rt of an.** UPDA
228b0 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f  TE operation.  O
228c0 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65  therwise (if the
228d0 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20   flag is clear) 
228e0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
228f0 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61  .** is part of a
22900 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69  n INSERT operati
22910 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  on.  The differe
22920 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f  nce is only impo
22930 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  rtant to.** the 
22940 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a  update hook..**.
22950 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
22960 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 73  may point to a s
22970 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
22980 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c   the table-name,
22990 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55   or.** may be NU
229a0 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f 74  LL. If it is not
229b0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
229c0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20  update-hook .** 
229d0 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65  (sqlite3.xUpdate
229e0 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76  Callback) is inv
229f0 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  oked following a
22a00 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
22a10 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
22a20 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
22a30 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
22a40 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
22a50 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
22a60 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
22a70 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
22a80 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
22a90 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
22aa0 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
22ab0 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
22ac0 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
22ad0 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
22ae0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
22af0 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
22b00 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
22b10 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
22b20 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
22b30 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
22b40 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
22b50 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
22b60 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
22b70 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
22b80 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
22b90 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
22ba0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
22bb0 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20  code: InsertInt 
22bc0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
22bd0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74  * Synopsis:  int
22be0 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32  key=P3 data=r[P2
22bf0 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
22c00 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
22c10 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74  OP_Insert except
22c20 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73   that the key is
22c30 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
22c40 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68  value P3, not th
22c50 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
22c60 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e  nteger stored in
22c70 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
22c80 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
22c90 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74   .case OP_Insert
22ca0 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44  Int: {.  Mem *pD
22cb0 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45  ata;       /* ME
22cc0 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64  M cell holding d
22cd0 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ata for the reco
22ce0 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
22cf0 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79  d */.  Mem *pKey
22d00 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  ;        /* MEM 
22d10 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79  cell holding key
22d20 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64    for the record
22d30 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20   */.  i64 iKey; 
22d40 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
22d50 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72 20  nteger ROWID or 
22d60 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63 6f  key for the reco
22d70 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  rd to be inserte
22d80 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
22d90 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73  r *pC;   /* Curs
22da0 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f  or to table into
22db0 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73   which insert is
22dc0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
22dd0 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20  t nZero;        
22de0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
22df0 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65 6e  o-bytes to appen
22e00 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52  d */.  int seekR
22e10 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75  esult;   /* Resu
22e20 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b  lt of prior seek
22e30 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53   or 0 if no USES
22e40 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a  EEKRESULT flag *
22e50 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
22e60 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73  zDb;  /* databas
22e70 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
22e80 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
22e90 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22ea0 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65   *zTbl; /* Table
22eb0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
22ec0 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20  the opdate hook 
22ed0 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20  */.  int op;    
22ee0 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
22ef0 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b   for update hook
22f00 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  : SQLITE_UPDATE 
22f10 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  or SQLITE_INSERT
22f20 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26   */..  pData = &
22f30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
22f40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22f50 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22f60 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
22f70 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
22f80 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
22f90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
22fa0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
22fb0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
22fc0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
22fd0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22fe0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
22ff0 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  g==0 );.  assert
23000 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
23010 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
23020 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
23030 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
23040 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
23050 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
23060 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
23070 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
23080 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
23090 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
230a0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
230b0 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
230c0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
230d0 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20  pKey);.    iKey 
230e0 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
230f0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
23100 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
23110 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
23120 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70     iKey = pOp->p
23130 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f  3;.  }..  if( pO
23140 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
23150 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
23160 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
23170 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
23180 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
23190 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
231a0 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66  wid = iKey;.  if
231b0 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
231c0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
231d0 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20   pData->z = 0;. 
231e0 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b     pData->n = 0;
231f0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
23200 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
23210 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
23220 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20  EM_Str) );.  }. 
23230 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
23240 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
23250 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
23260 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
23270 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
23280 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
23290 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72  Zero ){.    nZer
232a0 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65  o = pData->u.nZe
232b0 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ro;.  }else{.   
232c0 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a   nZero = 0;.  }.
232d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
232e0 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70 43  reeInsert(pC->pC
232f0 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a  ursor, 0, iKey,.
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61 2d            pData-
23320 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a  >z, pData->n, nZ
23330 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ero,.           
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
23350 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
23360 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65 65  _APPEND)!=0, see
23370 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70  kResult.  );.  p
23380 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23390 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
233a0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
233b0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
233c0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
233d0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
233e0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53  . */.  if( rc==S
233f0 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
23400 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
23410 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  && pOp->p4.z ){.
23420 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
23430 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65  b[pC->iDb].zName
23440 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70  ;.    zTbl = pOp
23450 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d  ->p4.z;.    op =
23460 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
23470 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20  LAG_ISUPDATE) ? 
23480 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20  SQLITE_UPDATE : 
23490 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a  SQLITE_INSERT);.
234a0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
234b0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 64  isTable );.    d
234c0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
234d0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
234e0 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c  g, op, zDb, zTbl
234f0 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73  , iKey);.    ass
23500 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
23510 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
23520 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
23530 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34 20  lete P1 P2 * P4 
23540 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  *.**.** Delete t
23550 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69  he record at whi
23560 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  ch the P1 cursor
23570 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
23580 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68  inting..**.** Th
23590 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
235a0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
235b0 74 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78  t either the nex
235c0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
235d0 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
235e0 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
235f0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
23600 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
23610 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
23620 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
23630 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
23640 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69   no-op.  Hence i
23650 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74  t is OK to delet
23660 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 66 72  e.** a record fr
23670 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74  om within a Next
23680 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   loop..**.** If 
23690 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
236a0 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 69 73  GE flag of P2 is
236b0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
236c0 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
236d0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
236e0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
236f0 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
23700 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
23710 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
23720 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
23730 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
23740 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
23750 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
23760 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
23770 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
23780 65 20 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20  e that P1 is.** 
23790 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68  pointing to.  Th
237a0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69  e update hook wi
237b0 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69  ll be invoked, i
237c0 66 20 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20  f it exists..** 
237d0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
237e0 4c 20 74 68 65 6e 20 74 68 65 20 50 31 20 63 75  L then the P1 cu
237f0 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
23800 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a  een positioned.*
23810 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  * using OP_NotFo
23820 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
23830 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
23840 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
23850 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
23860 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
23870 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
23880 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
23890 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
238a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
238b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
238c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
238d0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
238e0 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64  ;  /* Only valid
238f0 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73   for real tables
23900 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65  , no pseudotable
23910 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  s */.  assert( p
23920 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23930 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20  o==0 );..#ifdef 
23940 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 2f  SQLITE_DEBUG.  /
23950 2a 20 54 68 65 20 73 65 65 6b 20 6f 70 65 72 61  * The seek opera
23960 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69  tion that positi
23970 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
23980 70 72 69 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65  prior to OP_Dele
23990 74 65 20 77 69 6c 6c 0a 20 20 2a 2a 20 68 61 76  te will.  ** hav
239a0 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70  e also set the p
239b0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
239c0 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77  field to the row
239d0 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 74 68  id of the row th
239e0 61 74 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e 67  at.  ** is being
239f0 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 69 66   deleted */.  if
23a00 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70  ( pOp->p4.z && p
23a10 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
23a20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a    i64 iKey = 0;.
23a30 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
23a40 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72  KeySize(pC->pCur
23a50 73 6f 72 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20  sor, &iKey);.   
23a60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76   assert( pC->mov
23a70 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20  etoTarget==iKey 
23a80 29 3b 20 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ); .  }.#endif. 
23a90 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23aa0 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 70  treeDelete(pC->p
23ab0 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63  Cursor);.  pC->c
23ac0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
23ad0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
23ae0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
23af0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
23b00 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
23b10 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
23b20 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
23b30 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26  k && pOp->p4.z &
23b40 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
23b50 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
23b60 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
23b70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
23b80 44 45 4c 45 54 45 2c 0a 20 20 20 20 20 20 20 20  DELETE,.        
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
23bb0 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e  .zName, pOp->p4.
23bc0 7a 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  z, pC->movetoTar
23bd0 67 65 74 29 3b 0a 20 20 20 20 61 73 73 65 72 74  get);.    assert
23be0 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
23bf0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
23c00 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
23c10 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
23c20 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a  +;.  break;.}./*
23c30 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
23c40 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  unt * * * * *.**
23c50 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
23c60 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
23c70 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f  ter is copied to
23c80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
23c90 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ndle.** change c
23ca0 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64  ounter (returned
23cb0 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63   by subsequent c
23cc0 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  alls to sqlite3_
23cd0 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54  changes())..** T
23ce0 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65  hen the VMs inte
23cf0 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
23d00 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e  ter resets to 0.
23d10 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64  .** This is used
23d20 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
23d30 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
23d40 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
23d50 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
23d60 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
23d70 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68  hange);.  p->nCh
23d80 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  ange = 0;.  brea
23d90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23da0 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50   SorterCompare P
23db0 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
23dc0 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28  nopsis:  if key(
23dd0 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c  P1)!=trim(r[P3],
23de0 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P4) goto P2.**.*
23df0 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
23e00 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e   cursor. This in
23e10 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72  struction compar
23e20 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  es a prefix of t
23e30 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f  he.** record blo
23e40 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  b in register P3
23e50 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69   against a prefi
23e60 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74  x of the entry t
23e70 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74  hat .** the sort
23e80 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e  er cursor curren
23e90 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20  tly points to.  
23ea0 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50  Only the first P
23eb0 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72  4 fields.** of r
23ec0 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72  [P3] and the sor
23ed0 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63  ter record are c
23ee0 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  ompared..**.** I
23ef0 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74  f either P3 or t
23f00 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69  he sorter contai
23f10 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65  ns a NULL in one
23f20 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66   of their signif
23f30 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20  icant.** fields 
23f40 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68  (not counting th
23f50 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74  e P4 fields at t
23f60 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65  he end which are
23f70 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a   ignored) then.*
23f80 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
23f90 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
23fa0 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46  e equal..**.** F
23fb0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e  all through to n
23fc0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
23fd0 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  if the two recor
23fe0 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ds compare equal
23ff0 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65   to.** each othe
24000 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  r.  Jump to P2 i
24010 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65  f they are diffe
24020 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rent..*/.case OP
24030 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
24040 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
24050 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
24060 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20   int nKeyCol;.. 
24070 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24080 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24090 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
240a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
240b0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
240c0 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  32 );.  pIn3 = &
240d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
240e0 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e   nKeyCol = pOp->
240f0 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b  p4.i;.  res = 0;
24100 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
24110 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  dbeSorterCompare
24120 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43  (pC, pIn3, nKeyC
24130 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62  ol, &res);.  Vdb
24140 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
24150 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
24160 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
24170 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  _p2;.  break;.};
24180 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
24190 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33  terData P1 P2 P3
241a0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
241b0 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
241c0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
241d0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
241e0 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
241f0 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
24200 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20  sor P1..** Then 
24210 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e  clear the column
24220 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e   header cache on
24230 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a   cursor P3..**.*
24240 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
24250 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f   normally use to
24260 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f   move a record o
24270 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72  ut of the sorter
24280 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72   and into.** a r
24290 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20  egister that is 
242a0 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61  the source for a
242b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
242c0 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69  rsor created usi
242d0 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f  ng.** OpenPseudo
242e0 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74  .  That pseudo-t
242f0 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74  able cursor is t
24300 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69  he one that is i
24310 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20  dentified by.** 
24320 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43  parameter P3.  C
24330 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63  learing the P3 c
24340 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70  olumn cache as p
24350 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  art of this opco
24360 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66  de saves.** us f
24370 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73  rom having to is
24380 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e  sue a separate N
24390 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69  ullRow instructi
243a0 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74  on to clear that
243b0 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20   cache..*/.case 
243c0 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
243d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
243e0 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
243f0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
24400 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24410 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24420 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
24430 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
24440 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
24450 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73  pC, pOut);.  ass
24460 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f  ert( rc!=SQLITE_
24470 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61  OK || (pOut->fla
24480 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29  gs & MEM_Blob) )
24490 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
244a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
244b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
244c0 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
244d0 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73  p3]->cacheStatus
244e0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
244f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24500 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
24510 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
24520 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
24530 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
24540 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
24550 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
24560 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72   data for cursor
24570 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73   P1..** There is
24580 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
24590 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
245a0 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
245b0 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
245c0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
245d0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
245e0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
245f0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
24600 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
24610 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
24620 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
24630 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
24640 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
24650 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
24660 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
24670 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65  /* Opcode: RowKe
24680 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
24690 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
246a0 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  =key.**.** Write
246b0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
246c0 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
246d0 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f  ow key for curso
246e0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
246f0 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
24700 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
24710 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73    .** The key is
24720 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
24730 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
24740 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
24750 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
24760 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
24770 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
24780 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
24790 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
247a0 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
247b0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
247c0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
247d0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
247e0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a  .case OP_RowKey:
247f0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
24800 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24810 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
24820 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
24830 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20  ;.  i64 n64;..  
24840 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
24850 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
24860 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
24870 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74  t);..  /* Note t
24880 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52  hat RowKey and R
24890 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c  owData are reall
248a0 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  y exactly the sa
248b0 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a  me instruction *
248c0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
248d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
248e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
248f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24900 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24910 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
24920 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
24930 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20   pC->isTable || 
24940 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
24950 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73  RowData );.  ass
24960 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24970 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 || pOp->opco
24980 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de==OP_RowData )
24990 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
249a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
249b0 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
249c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
249d0 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30  seudoTableReg==0
249e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
249f0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
24a00 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
24a10 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65  ursor;..  /* The
24a20 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f   OP_RowKey and O
24a30 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
24a40 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
24a50 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
24a60 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f    ** OP_Rewind/O
24a70 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
24a80 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
24a90 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  uctions that mig
24aa0 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20  ht invalidate.  
24ab0 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  ** the cursor.  
24ac0 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f  If this where no
24ad0 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f  t the case, on o
24ae0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
24af0 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77  assert()s.  ** w
24b00 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75  ould fail.  Shou
24b10 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61  ld this ever cha
24b20 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20  nge (because of 
24b30 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63  changes in the c
24b40 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74  ode.  ** generat
24b50 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78  or) then the fix
24b60 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73   would be to ins
24b70 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20  ert a call to.  
24b80 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ** sqlite3VdbeCu
24b90 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20  rsorMoveto()..  
24ba0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
24bb0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
24bc0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24bd0 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
24be0 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
24bf0 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f   );.#if 0  /* No
24c00 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74  t required due t
24c10 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  o the previous t
24c20 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  o assert() state
24c30 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20  ments */.  rc = 
24c40 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
24c50 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
24c60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
24c70 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
24c80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
24c90 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
24ca0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
24cb0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
24cc0 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f  able );.    VVA_
24cd0 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
24ce0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
24cf0 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
24d00 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
24d10 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
24d20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
24d30 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
24d40 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
24d50 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
24d60 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
24d70 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
24d80 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
24d90 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
24da0 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
24db0 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
24dc0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
24dd0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
24de0 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
24df0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24e00 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
24e10 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
24e20 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
24e30 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
24e40 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
24e50 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
24e60 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
24e70 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d  }.  testcase( n=
24e80 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  =0 );.  if( sqli
24e90 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
24ea0 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 4d  ndResize(pOut, M
24eb0 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20 20  AX(n,32)) ){.   
24ec0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
24ed0 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
24ee0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
24ef0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
24f00 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  );.  if( pC->isT
24f10 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72  able==0 ){.    r
24f20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24f30 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
24f40 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
24f50 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
24f60 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
24f70 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
24f80 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
24f90 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
24fa0 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
24fb0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
24fc0 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
24fd0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
24fe0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
24ff0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
25000 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
25010 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25020 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
25030 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
25040 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
25050 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
25060 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
25070 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
25080 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
25090 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
250a0 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
250b0 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
250c0 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
250d0 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
250e0 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
250f0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
25100 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
25110 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
25120 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
25130 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
25140 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
25150 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
25160 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
25170 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
25180 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
25190 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
251a0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
251b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
251c0 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
251d0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
251e0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
251f0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
25200 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
25210 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
25220 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
25230 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25240 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25250 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25260 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25270 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25280 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
25290 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c  doTableReg==0 ||
252a0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
252b0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
252c0 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  w ){.    pOut->f
252d0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
252e0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
252f0 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
25300 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
25310 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
25320 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20  Target;.#ifndef 
25330 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
25340 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65  UALTABLE.  }else
25350 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75   if( pC->pVtabCu
25360 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61  rsor ){.    pVta
25370 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72  b = pC->pVtabCur
25380 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  sor->pVtab;.    
25390 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
253a0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
253b0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
253c0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
253d0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
253e0 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  d(pC->pVtabCurso
253f0 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
25400 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
25410 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23  msg(p, pVtab);.#
25420 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
25430 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
25440 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
25450 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
25460 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
25470 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
25480 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
25490 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
254a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
254b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28  o_error;.    if(
254c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
254d0 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67        pOut->flag
254e0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
254f0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
25500 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
25510 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
25520 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
25530 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
25540 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a  SQLITE_OK );  /*
25550 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75   Always so becau
25560 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74  se of CursorRest
25570 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  ore() above */. 
25580 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
25590 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
255a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
255b0 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
255c0 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
255d0 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
255e0 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
255f0 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
25600 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
25610 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
25620 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
25630 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
25640 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
25650 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
25660 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
25670 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
25680 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25690 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
256a0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
256b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
256c0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
256d0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
256e0 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 1;.  pC->cach
256f0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25700 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d  STALE;.  if( pC-
25710 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20  >pCursor ){.    
25720 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
25730 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72  rCursor(pC->pCur
25740 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  sor);.  }.  brea
25750 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
25760 20 4c 61 73 74 20 50 31 20 50 32 20 50 33 20 2a   Last P1 P2 P3 *
25770 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
25780 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
25790 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
257a0 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
257b0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
257c0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61   refer to the la
257d0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
257e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
257f0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
25800 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
25810 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
25820 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
25830 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
25840 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
25850 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
25860 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
25870 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
25880 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
25890 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
258a0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
258b0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
258c0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
258d0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
258e0 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
258f0 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
25900 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
25910 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
25920 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
25930 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
25940 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
25950 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20  t Next..*/.case 
25960 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
25970 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
25980 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25990 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
259a0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
259b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
259c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
259d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
259e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
259f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25a00 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
25a10 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
25a20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
25a30 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
25a40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
25a50 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
25a60 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
25a70 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
25a80 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
25a90 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
25aa0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
25ab0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
25ac0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f  >seekResult = pO
25ad0 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51  p->p3;.#ifdef SQ
25ae0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
25af0 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73  >seekOp = OP_Las
25b00 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
25b10 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
25b20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
25b30 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
25b40 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
25b50 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
25b60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
25b70 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
25b80 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
25b90 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
25ba0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
25bb0 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
25bc0 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
25bd0 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
25be0 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
25bf0 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
25c00 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
25c10 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
25c20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
25c30 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
25c40 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
25c50 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
25c60 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
25c70 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
25c80 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
25c90 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
25ca0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
25cb0 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
25cc0 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
25cd0 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
25ce0 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
25cf0 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
25d00 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
25d10 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
25d20 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
25d30 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
25d40 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
25d50 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
25d60 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
25d70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
25d80 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
25d90 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
25da0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
25db0 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
25dc0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
25dd0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
25de0 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
25df0 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
25e00 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
25e10 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
25e20 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
25e30 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
25e40 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
25e50 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
25e60 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
25e70 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
25e80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
25e90 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
25ea0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
25eb0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
25ec0 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
25ed0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
25ee0 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
25ef0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
25f00 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
25f10 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
25f20 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75  dex is empty, ju
25f30 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
25f40 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20  o P2..** If the 
25f50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
25f60 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
25f70 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
25f80 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69   following .** i
25f90 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
25fa0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
25fb0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
25fc0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
25fd0 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
25fe0 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
25ff0 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
26000 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
26010 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
26020 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
26030 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
26040 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
26050 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
26060 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
26070 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
26080 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
26090 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
260a0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
260b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
260c0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
260d0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
260e0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
260f0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26100 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26110 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
26120 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
26130 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
26140 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
26150 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
26160 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e  eekOp = OP_Rewin
26170 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  d;.#endif.  if( 
26180 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
26190 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
261a0 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64  VdbeSorterRewind
261b0 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65  (pC, &res);.  }e
261c0 6c 73 65 7b 0a 20 20 20 20 70 43 72 73 72 20 3d  lse{.    pCrsr =
261d0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
261e0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
261f0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
26200 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
26210 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
26220 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
26230 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
26240 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26250 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
26260 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
26270 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
26280 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
26290 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
262a0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
262b0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
262c0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
262d0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
262e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
262f0 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
26300 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
26310 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
26320 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
26330 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
26340 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
26350 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
26360 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
26370 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
26380 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
26390 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
263a0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
263b0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
263c0 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
263d0 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
263e0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
263f0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
26400 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
26410 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
26420 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
26430 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
26440 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
26450 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
26460 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
26470 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
26480 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
26490 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
264a0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
264b0 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
264c0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
264d0 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
264e0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
264f0 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
26500 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
26510 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
26520 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
26530 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
26540 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
26550 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
26560 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
26570 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
26580 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
26590 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
265a0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
265b0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
265c0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
265d0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
265e0 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
265f0 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
26600 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
26610 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
26620 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
26630 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
26640 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
26650 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
26660 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
26670 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
26680 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
26690 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
266a0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
266b0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
266c0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
266d0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
266e0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
266f0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
26700 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
26710 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c   See also: Prev,
26720 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f   NextIfOpen.*/./
26730 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66  * Opcode: NextIf
26740 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
26750 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
26760 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
26770 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70   like Next excep
26780 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
26790 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
267a0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
267b0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
267c0 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
267d0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
267e0 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
267f0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
26800 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
26810 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
26820 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
26830 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
26840 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
26850 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
26860 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
26870 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
26880 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
26890 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
268a0 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
268b0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
268c0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
268d0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
268e0 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
268f0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
26900 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
26910 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
26920 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
26930 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
26940 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
26950 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
26960 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
26970 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
26980 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
26990 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
269a0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
269b0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
269c0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
269d0 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
269e0 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
269f0 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
26a00 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
26a10 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
26a20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
26a30 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
26a40 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
26a50 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
26a60 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
26a70 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
26a80 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
26a90 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
26aa0 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
26ab0 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
26ac0 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
26ad0 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
26ae0 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
26af0 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
26b00 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
26b10 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
26b20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
26b30 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
26b40 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
26b50 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
26b60 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
26b70 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
26b80 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
26b90 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
26ba0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
26bb0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
26bc0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
26bd0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
26be0 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20  revIfOpen P1 P2 
26bf0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54  P3 P4 P5.**.** T
26c00 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
26c10 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20   just like Prev 
26c20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63  except that if c
26c30 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a  ursor P1 is not.
26c40 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76  ** open it behav
26c50 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  es a no-op..*/.c
26c60 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
26c70 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
26c80 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26c90 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
26ca0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26cb0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26cc0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
26cd0 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
26ce0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26cf0 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
26d00 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f  C, &res);.  goto
26d10 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65   next_tail;.case
26d20 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20   OP_PrevIfOpen: 
26d30 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
26d40 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  se OP_NextIfOpen
26d50 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
26d60 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
26d70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65  Op->p1]==0 ) bre
26d80 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
26d90 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50  rough */.case OP
26da0 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
26db0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
26dc0 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
26dd0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
26de0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26df0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26e00 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
26e10 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
26e20 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
26e30 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
26e40 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26e50 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33  .  res = pOp->p3
26e60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26e70 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26e80 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
26e90 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
26ea0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b  ( pC->pCursor );
26eb0 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d  .  assert( res==
26ec0 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20  0 || (res==1 && 
26ed0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20  pC->isTable==0) 
26ee0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72  );.  testcase( r
26ef0 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  es==1 );.  asser
26f00 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26f10 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
26f20 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
26f30 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
26f40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26f50 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
26f60 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
26f70 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
26f80 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
26f90 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
26fa0 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
26fb0 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
26fc0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
26fd0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
26fe0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26ff0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
27000 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
27010 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
27020 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
27030 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
27040 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
27050 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
27060 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
27070 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
27080 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
27090 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
270a0 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
270b0 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
270c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
270d0 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
270e0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
270f0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
27100 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
27110 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
27120 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
27130 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
27140 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
27150 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
27160 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
27170 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
27180 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
27190 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
271a0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
271b0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
271c0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
271d0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
271e0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
271f0 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
27200 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
27210 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73 6f  vance(pC->pCurso
27220 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74  r, &res);.next_t
27230 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
27240 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
27250 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e  TALE;.  VdbeBran
27260 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32  chTaken(res==0,2
27270 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  );.  if( res==0 
27280 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
27290 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61  ow = 0;.    p->a
272a0 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d  Counter[pOp->p5]
272b0 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
272c0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
272d0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
272e0 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f  +;.#endif.    go
272f0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
27300 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
27310 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
27320 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
27330 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  = 1;.  }.  goto 
27340 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
27350 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
27360 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20  e: IdxInsert P1 
27370 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79  P2 P3 * P5.** Sy
27380 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
27390 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
273a0 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
273b0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
273c0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
273d0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
273e0 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
273f0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
27400 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
27410 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
27420 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
27430 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  nil..**.** P3 is
27440 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f   a flag that pro
27450 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20  vides a hint to 
27460 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
27470 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e   that this.** in
27480 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
27490 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
274a0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
274b0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
274c0 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  GE bit set, then
274d0 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
274e0 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  ter is.** increm
274f0 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e  ented by this in
27500 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
27510 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
27520 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a  E bit is clear,.
27530 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  ** then the chan
27540 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e  ge counter is un
27550 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  changed..**.** I
27560 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
27570 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
27580 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  T bit set, then 
27590 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20  the cursor must 
275a0 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e  have.** just don
275b0 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20  e a seek to the 
275c0 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e  spot where the n
275d0 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62  ew entry is to b
275e0 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54  e inserted..** T
275f0 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20  his flag avoids 
27600 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73  doing an extra s
27610 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  eek..**.** This 
27620 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
27630 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
27640 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
27650 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
27660 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
27670 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63   OP_Insert..*/.c
27680 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
27690 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
276a0 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
276b0 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
276c0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
276d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
276e0 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74  nt nKey;.  const
276f0 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20   char *zKey;..  
27700 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27710 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27720 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27730 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27740 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27750 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
27760 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
27770 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
27780 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
27790 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
277a0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
277b0 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
277c0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
277d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
277e0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
277f0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
27800 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
27810 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
27820 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
27830 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78  ==0 );.  rc = Ex
27840 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
27850 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
27860 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 70  _OK ){.    if( p
27870 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
27880 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20  orterInsert ){. 
27890 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
278a0 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
278b0 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20  (pC, pIn2);.    
278c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65  }else{.      nKe
278d0 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
278e0 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     zKey = pIn2->
278f0 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  z;.      rc = sq
27900 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
27910 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 7a 4b  (pC->pCursor, zK
27920 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c  ey, nKey, "", 0,
27930 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20   0, pOp->p3, .  
27940 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
27950 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
27960 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
27970 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
27980 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
27990 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
279a0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
279b0 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61   );.      pC->ca
279c0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
279d0 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20  E_STALE;.    }. 
279e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
279f0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c  * Opcode: IdxDel
27a00 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ete P1 P2 P3 * *
27a10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
27a20 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a  y=r[P2@P3].**.**
27a30 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
27a40 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61  P3 registers sta
27a50 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65  rting at registe
27a60 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20  r P2 form.** an 
27a70 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
27a80 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ey. This opcode 
27a90 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74  removes that ent
27aa0 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20  ry from the .** 
27ab0 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20  index opened by 
27ac0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61  cursor P1..*/.ca
27ad0 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a  se OP_IdxDelete:
27ae0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27af0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
27b00 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
27b10 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
27b20 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
27b30 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
27b40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
27b50 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f  >0 && pOp->p2+pO
27b60 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
27b70 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
27b80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27b90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27ba0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
27bb0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
27bc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
27bd0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
27be0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
27bf0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
27c00 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
27c10 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
27c20 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
27c30 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
27c40 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
27c50 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66  pOp->p3;.  r.def
27c60 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72  ault_rc = 0;.  r
27c70 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
27c80 70 2d 3e 70 32 5d 3b 0a 23 69 66 64 65 66 20 53  p->p2];.#ifdef S
27c90 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
27ca0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
27cb0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
27cc0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
27cd0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
27ce0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63  ); }.#endif.  rc
27cf0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
27d00 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
27d10 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  rsr, &r, 0, 0, &
27d20 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  res);.  if( rc==
27d30 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
27d40 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
27d50 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
27d60 74 65 28 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20  te(pCrsr);.  }. 
27d70 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
27d80 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27d90 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
27da0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
27db0 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
27dc0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
27dd0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
27de0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
27df0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72  ]=rowid.**.** Wr
27e00 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
27e10 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
27e20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
27e30 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
27e40 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
27e50 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
27e60 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
27e70 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
27e80 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
27e90 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
27ea0 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
27eb0 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
27ec0 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
27ed0 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
27ee0 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
27ef0 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
27f00 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
27f10 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
27f20 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 43 75  * out2 */.  BtCu
27f30 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
27f40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
27f50 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 70   i64 rowid;..  p
27f60 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
27f70 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
27f80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27f90 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27fa0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27fb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27fc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27fd0 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
27fe0 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
27ff0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
28000 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
28010 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
28020 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
28030 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73  Table==0 );.  as
28040 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
28050 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a  edMoveto==0 );..
28060 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43    /* sqlite3VbeC
28070 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63  ursorRestore() c
28080 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20  an only fail if 
28090 74 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 62  the record has b
280a0 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a  een deleted.  **
280b0 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20   out from under 
280c0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61  the cursor.  Tha
280d0 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70  t will never hap
280e0 70 65 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52  pend for an IdxR
280f0 6f 77 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65  owid.  ** opcode
28100 2c 20 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45  , hence the NEVE
28110 52 28 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20  R() arround the 
28120 63 68 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74  check of the ret
28130 75 72 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a  urn value..  */.
28140 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
28150 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
28160 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
28170 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
28180 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28190 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
281a0 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ( !pC->nullRow )
281b0 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b  {.    rowid = 0;
281c0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
281d0 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
281e0 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
281f0 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
28200 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
28210 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f  d(db, pCrsr, &ro
28220 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
28230 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
28240 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
28250 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
28260 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
28270 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70  i = rowid;.    p
28280 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
28290 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _Int;.  }.  brea
282a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
282b0 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
282c0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
282d0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
282e0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
282f0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
28300 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
28310 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
28320 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
28330 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
28340 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
28350 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
28360 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
28370 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
28380 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
28390 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
283a0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
283b0 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
283c0 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
283d0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
283e0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
283f0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
28400 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
28410 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
28420 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
28430 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
28440 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
28450 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
28460 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
28470 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
28480 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
28490 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
284a0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
284b0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
284c0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
284d0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
284e0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
284f0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
28500 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
28510 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
28520 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
28530 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
28540 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
28550 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
28560 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
28570 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
28580 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
28590 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
285a0 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
285b0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
285c0 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
285d0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
285e0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
285f0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
28600 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
28610 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54  /* Opcode: IdxLT
28620 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
28630 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
28640 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
28650 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
28660 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
28670 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
28680 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
28690 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
286a0 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
286b0 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
286c0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
286d0 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
286e0 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
286f0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
28700 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
28710 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
28720 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
28730 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
28740 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
28750 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
28760 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
28770 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
28780 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
28790 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
287a0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
287b0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
287c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45  /* Opcode: IdxLE
287d0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
287e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
287f0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
28800 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
28810 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
28820 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
28830 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
28840 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
28850 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
28860 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
28870 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
28880 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
28890 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
288a0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
288b0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
288c0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
288d0 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
288e0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
288f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
28900 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
28910 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
28920 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
28930 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a  alue then jump.*
28940 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
28950 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
28960 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
28970 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
28980 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20   OP_IdxLE:      
28990 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
289a0 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20  ase OP_IdxGT:   
289b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
289c0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a  /.case OP_IdxLT:
289d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
289e0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
289f0 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20  GE:  {       /* 
28a00 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
28a10 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
28a20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
28a30 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
28a40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28a50 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28a60 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
28a70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
28a80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
28a90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
28aa0 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
28ab0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
28ac0 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
28ad0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
28ae0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
28af0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
28b00 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
28b10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28b20 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
28b30 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
28b40 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
28b50 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
28b60 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
28b70 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
28b80 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
28b90 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
28ba0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
28bb0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
28bc0 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
28bd0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
28be0 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
28bf0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
28c00 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
28c10 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
28c20 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
28c30 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
28c40 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
28c50 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
28c60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
28c70 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
28c80 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
28c90 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
28ca0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
28cb0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
28cc0 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
28cd0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
28ce0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
28cf0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
28d00 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
28d10 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
28d20 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
28d30 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
28d40 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
28d50 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
28d60 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
28d70 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
28d80 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
28d90 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
28da0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
28db0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
28dc0 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
28dd0 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
28de0 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
28df0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
28e00 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
28e10 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
28e20 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
28e30 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
28e40 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
28e50 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
28e60 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29  );.  if( res>0 )
28e70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
28e80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
28e90 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
28ea0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
28eb0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
28ec0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
28ed0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
28ee0 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
28ef0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
28f00 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
28f10 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
28f20 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
28f30 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
28f40 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
28f50 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
28f60 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
28f70 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
28f80 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
28f90 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
28fa0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
28fb0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
28fc0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
28fd0 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
28fe0 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
28ff0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
29000 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
29010 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
29020 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
29030 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
29040 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
29050 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
29060 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
29070 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
29080 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
29090 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
290a0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
290b0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
290c0 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
290d0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
290e0 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
290f0 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
29100 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
29110 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
29120 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
29130 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
29140 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
29150 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
29160 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
29170 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
29180 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
29190 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
291a0 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
291b0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
291c0 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
291d0 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
291e0 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
291f0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
29200 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
29210 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
29220 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
29230 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
29240 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  t2 */.  int iMov
29250 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a  ed;.  int iDb;..
29260 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
29270 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 4f  dOnly==0 );.  pO
29280 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
29290 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
292a0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
292b0 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d  _Null;.  if( db-
292c0 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d  >nVdbeRead > db-
292d0 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a  >nVDestroy+1 ){.
292e0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
292f0 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65  LOCKED;.    p->e
29300 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f  rrorAction = OE_
29310 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Abort;.  }else{.
29320 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70      iDb = pOp->p
29330 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44  3;.    assert( D
29340 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
29350 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
29360 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20      iMoved = 0; 
29370 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
29380 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65   Only to silence
29390 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
293a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
293b0 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62  treeDropTable(db
293c0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20  ->aDb[iDb].pBt, 
293d0 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64  pOp->p1, &iMoved
293e0 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
293f0 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
29400 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
29410 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51  oved;.#ifndef SQ
29420 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
29430 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d  CUUM.    if( rc=
29440 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d  =SQLITE_OK && iM
29450 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20  oved!=0 ){.     
29460 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
29470 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69  Moved(db, iDb, i
29480 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
29490 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50  .      /* All OP
294a0 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69  _Destroy operati
294b0 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65  ons occur on the
294c0 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20   same btree */. 
294d0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
294e0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
294f0 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d  =0 || resetSchem
29500 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20  aOnFault==iDb+1 
29510 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63  );.      resetSc
29520 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44  hemaOnFault = iD
29530 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  b+1;.    }.#endi
29540 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  f.  }.  break;.}
29550 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65  ../* Opcode: Cle
29560 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a  ar P1 P2 P3.**.*
29570 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
29580 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74  tents of the dat
29590 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
295a0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
295b0 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64  page.** in the d
295c0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
295d0 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75  given by P1.  Bu
295e0 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f  t, unlike Destro
295f0 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d  y, do not.** rem
29600 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72  ove the table or
29610 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20   index from the 
29620 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
29630 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
29640 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e  eing clear is in
29650 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
29660 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30  se file if P2==0
29670 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74  .  If.** P2==1 t
29680 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
29690 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
296a0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
296b0 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
296c0 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
296d0 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
296e0 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
296f0 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
29700 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33  .**.** If the P3
29710 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
29720 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ro, then the tab
29730 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d  le referred to m
29740 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
29750 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
29760 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
29770 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
29780 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
29790 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
297a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
297b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
297c0 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
297d0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
297e0 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
297f0 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
29800 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
29810 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
29820 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
29830 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
29840 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
29850 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
29860 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
29870 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
29880 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
29890 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
298a0 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61  Change;. .  nCha
298b0 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  nge = 0;.  asser
298c0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
298d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
298e0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
298f0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29  eeMask, pOp->p2)
29900 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
29910 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
29920 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62  e(.      db->aDb
29930 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70  [pOp->p2].pBt, p
29940 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33  Op->p1, (pOp->p3
29950 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29   ? &nChange : 0)
29960 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  .  );.  if( pOp-
29970 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43  >p3 ){.    p->nC
29980 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65  hange += nChange
29990 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
299a0 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  3>0 ){.      ass
299b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
299c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
299d0 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
299e0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
299f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
29a00 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33      aMem[pOp->p3
29a10 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65  ].u.i += nChange
29a20 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
29a30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
29a40 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50  e: ResetSorter P
29a50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
29a60 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
29a70 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68  nts from the eph
29a80 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20  emeral table or 
29a90 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69  sorter.** that i
29aa0 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72  s open on cursor
29ab0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P1..**.** This 
29ac0 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b  opcode only work
29ad0 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73  s for cursors us
29ae0 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61  ed for sorting a
29af0 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74  nd.** opened wit
29b00 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  h OP_OpenEphemer
29b10 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f  al or OP_SorterO
29b20 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pen..*/.case OP_
29b30 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20  ResetSorter: {. 
29b40 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
29b50 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  . .  assert( pOp
29b60 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29b70 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29b80 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29b90 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29ba0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
29bb0 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20  if( pC->pSorter 
29bc0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
29bd0 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
29be0 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b 0a  , pC->pSorter);.
29bf0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
29c00 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d  ert( pC->isEphem
29c10 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d  eral );.    rc =
29c20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
29c30 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28  arTableOfCursor(
29c40 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
29c50 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
29c60 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
29c70 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
29c80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
29c90 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
29ca0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
29cb0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
29cc0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
29cd0 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
29ce0 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
29cf0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
29d00 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
29d10 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
29d20 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
29d30 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
29d40 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
29d50 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
29d60 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
29d70 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
29d80 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
29d90 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
29da0 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
29db0 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
29dc0 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
29dd0 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
29de0 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
29df0 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
29e00 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
29e10 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
29e20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
29e30 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
29e40 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
29e50 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
29e60 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
29e70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
29e80 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
29e90 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
29ea0 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
29eb0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
29ec0 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
29ed0 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
29ee0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
29ef0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
29f00 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
29f10 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
29f20 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
29f30 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
29f40 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
29f50 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
29f60 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
29f70 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
29f80 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
29f90 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
29fa0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
29fb0 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
29fc0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
29fd0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
29fe0 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
29ff0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
2a000 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61   pgno;.  int fla
2a010 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  gs;.  Db *pDb;..
2a020 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2a030 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2a040 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
2a050 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a060 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2a070 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2a080 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2a090 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2a0a0 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
2a0b0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2a0c0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
2a0d0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
2a0e0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
2a0f0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
2a100 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
2a110 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
2a120 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
2a130 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
2a140 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
2a150 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
2a160 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
2a170 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
2a180 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2a190 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
2a1a0 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
2a1b0 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
2a1c0 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
2a1d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2a1e0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
2a1f0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2a200 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
2a210 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
2a220 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
2a230 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
2a240 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
2a250 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
2a260 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
2a270 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
2a280 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
2a290 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
2a2a0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
2a2b0 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
2a2c0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2a2d0 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
2a2e0 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
2a2f0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
2a300 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
2a310 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
2a320 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
2a330 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
2a340 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
2a350 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
2a360 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
2a370 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
2a380 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
2a390 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
2a3a0 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
2a3b0 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
2a3c0 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
2a3d0 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
2a3e0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
2a3f0 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
2a400 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2a410 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
2a420 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
2a430 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
2a440 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
2a450 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
2a460 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
2a470 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
2a480 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2a490 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
2a4a0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
2a4b0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
2a4c0 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
2a4d0 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
2a4e0 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
2a4f0 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
2a500 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
2a510 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
2a520 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
2a530 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
2a540 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
2a550 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
2a560 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
2a570 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
2a580 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
2a590 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
2a5a0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
2a5b0 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
2a5c0 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
2a5d0 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
2a5e0 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
2a5f0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
2a600 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
2a610 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
2a620 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
2a630 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
2a640 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
2a650 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
2a660 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
2a670 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
2a680 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
2a690 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
2a6a0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
2a6b0 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
2a6c0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
2a6d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a6e0 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
2a6f0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2a700 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
2a710 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
2a720 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
2a730 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
2a740 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
2a750 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
2a760 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2a770 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
2a780 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c  }.  if( rc ) sql
2a790 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
2a7a0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
2a7b0 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
2a7c0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
2a7d0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2a7e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
2a7f0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
2a800 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
2a810 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
2a820 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
2a830 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
2a840 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
2a850 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
2a860 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
2a870 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
2a880 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
2a890 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
2a8a0 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
2a8b0 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
2a8c0 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
2a8d0 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
2a8e0 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
2a8f0 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
2a900 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
2a910 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
2a920 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a930 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a940 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
2a950 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
2a960 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
2a970 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
2a980 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
2a990 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2a9a0 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
2a9b0 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
2a9c0 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
2a9d0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2a9e0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2a9f0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2aa00 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2aa10 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
2aa20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2aa30 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2aa40 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2aa50 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
2aa60 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2aa70 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2aa80 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2aa90 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2aaa0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2aab0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2aac0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2aad0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2aae0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2aaf0 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
2ab00 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
2ab10 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2ab20 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
2ab30 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2ab40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ab50 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
2ab60 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2ab70 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2ab80 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2ab90 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2aba0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2abb0 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
2abc0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2abd0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2abe0 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
2abf0 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
2ac00 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2ac10 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2ac20 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
2ac30 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
2ac40 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2ac50 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2ac60 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2ac70 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2ac80 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2ac90 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
2aca0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2acb0 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
2acc0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2acd0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2ace0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2acf0 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
2ad00 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2ad10 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2ad20 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2ad30 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2ad40 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2ad50 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
2ad60 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2ad70 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2ad80 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
2ad90 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2ada0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2adb0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2adc0 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2add0 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2ade0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2adf0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2ae00 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2ae10 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2ae20 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2ae30 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
2ae40 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2ae50 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2ae60 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2ae70 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2ae80 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2ae90 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2aea0 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
2aeb0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
2aec0 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
2aed0 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
2aee0 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
2aef0 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
2af00 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
2af10 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2af20 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
2af30 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
2af40 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
2af50 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
2af60 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
2af70 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
2af80 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2af90 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2afa0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2afb0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2afc0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
2afd0 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
2afe0 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
2aff0 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
2b000 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
2b010 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
2b020 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
2b030 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
2b040 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
2b050 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
2b060 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
2b070 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2b080 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
2b090 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2b0a0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
2b0b0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2b0c0 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
2b0d0 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
2b0e0 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
2b0f0 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
2b100 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
2b110 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
2b120 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
2b130 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
2b140 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
2b150 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2b160 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
2b170 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2b180 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
2b190 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
2b1a0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
2b1b0 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2b1c0 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
2b1d0 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
2b1e0 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
2b1f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2b200 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
2b210 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
2b220 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
2b230 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
2b240 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
2b250 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
2b260 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
2b270 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
2b280 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
2b290 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2b2a0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
2b2b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
2b2c0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
2b2d0 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
2b2e0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
2b2f0 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
2b300 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
2b310 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2b320 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
2b330 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2b340 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
2b350 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
2b360 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
2b370 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
2b380 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
2b390 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
2b3a0 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
2b3b0 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
2b3c0 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
2b3d0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2b3e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b3f0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2b400 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2b410 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20  sor) );.  pnErr 
2b420 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2b430 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2b440 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
2b450 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
2b460 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2b470 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2b480 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
2b490 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2b4a0 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
2b4b0 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
2b4c0 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
2b4d0 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
2b4e0 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
2b4f0 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
2b500 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
2b510 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
2b520 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2b530 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2b540 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35  reeMask, pOp->p5
2b550 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ) );.  z = sqlit
2b560 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
2b570 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
2b580 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
2b590 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5b0 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
2b5c0 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
2b5d0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
2b5e0 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
2b5f0 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
2b600 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
2b610 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2b620 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
2b630 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
2b640 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
2b650 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
2b660 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2b670 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
2b680 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2b690 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
2b6a0 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
2b6b0 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
2b6c0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2b6d0 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
2b6e0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2b6f0 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
2b700 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
2b710 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2b720 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2b730 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
2b740 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
2b750 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2b760 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73   Synopsis:  rows
2b770 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
2b780 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
2b790 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
2b7a0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
2b7b0 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
2b7c0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
2b7d0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2b7e0 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
2b7f0 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
2b800 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
2b810 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2b820 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
2b830 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
2b840 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2b850 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
2b860 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2b870 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
2b880 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2b890 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
2b8a0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2b8b0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2b8c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2b8d0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2b8e0 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2b8f0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2b900 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2b910 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
2b920 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2b930 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b940 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
2b950 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b960 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
2b970 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2b980 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
2b990 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
2b9a0 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
2b9b0 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
2b9c0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
2b9d0 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
2b9e0 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
2b9f0 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
2ba00 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2ba10 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
2ba20 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
2ba30 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
2ba40 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2ba50 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
2ba60 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
2ba70 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2ba80 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
2ba90 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
2baa0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2bab0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2bac0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2bad0 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
2bae0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
2baf0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2bb00 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
2bb10 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
2bb20 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
2bb30 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
2bb40 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
2bb50 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  1);.    VdbeBran
2bb60 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
2bb70 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
2bb80 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
2bb90 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c  interrupt;.  }el
2bba0 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
2bbb0 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
2bbc0 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
2bbd0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2bbe0 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71  ken(0,2);.    sq
2bbf0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
2bc00 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
2bc10 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20  p3], val);.  }. 
2bc20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2bc30 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
2bc40 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
2bc50 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
2bc60 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2bc70 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28  r[P3] in rowset(
2bc80 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P1) goto P2.**.*
2bc90 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
2bca0 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64   assumed to hold
2bcb0 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
2bcc0 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69  r value. If regi
2bcd0 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61  ster P1.** conta
2bce0 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  ins a RowSet obj
2bcf0 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77  ect and that Row
2bd00 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61  Set object conta
2bd10 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ins.** the value
2bd20 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d   held in P3, jum
2bd30 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  p to register P2
2bd40 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73  . Otherwise, ins
2bd50 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  ert the.** integ
2bd60 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68  er in P3 into th
2bd70 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e  e RowSet and con
2bd80 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a  tinue on to the.
2bd90 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a  ** next opcode..
2bda0 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74  **.** The RowSet
2bdb0 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d   object is optim
2bdc0 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73  ized for the cas
2bdd0 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69  e where successi
2bde0 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e  ve sets.** of in
2bdf0 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61  tegers, where ea
2be00 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
2be10 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45  no duplicates. E
2be20 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61  ach set.** of va
2be30 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69  lues is identifi
2be40 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
2be50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
2be60 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
2be70 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
2be80 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20  inal set P4=-1. 
2be90 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68   P4 must be eith
2bea0 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d  er -1 or.** non-
2beb0 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e  negative.  For n
2bec0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
2bed0 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68  es of P4 only th
2bee0 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74  e lower 4.** bit
2bef0 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
2bf00 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  t..**.** This al
2bf10 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
2bf20 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
2bf30 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
2bf40 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
2bf50 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74  he rowset object
2bf60 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
2bf70 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
2bf80 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
2bf90 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
2bfa0 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
2bfb0 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
2bfc0 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
2bfd0 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
2bfe0 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
2bff0 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
2c000 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
2c010 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
2c020 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
2c030 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
2c040 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
2c050 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
2c060 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
2c070 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
2c080 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
2c090 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
2c0a0 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
2c0b0 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
2c0c0 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
2c0d0 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
2c0e0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
2c0f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2c100 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
2c110 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78  t iSet;.  int ex
2c120 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  ists;..  pIn1 = 
2c130 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2c140 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
2c150 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20  Op->p3];.  iSet 
2c160 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61  = pOp->p4.i;.  a
2c170 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
2c180 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20  gs&MEM_Int );.. 
2c190 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
2c1a0 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74  anything other t
2c1b0 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a  han a rowset obj
2c1c0 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  ect in memory ce
2c1d0 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65  ll P1,.  ** dele
2c1e0 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e  te it now and in
2c1f0 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68  itialize P1 with
2c200 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74   an empty rowset
2c210 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  .  */.  if( (pIn
2c220 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2c230 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2c240 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c250 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2c260 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2c270 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2c280 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2c290 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
2c2a0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2c2b0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
2c2c0 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
2c2d0 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
2c2e0 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
2c2f0 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
2c300 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d  RowSetTest(pIn1-
2c310 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74  >u.pRowSet, iSet
2c320 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2c330 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2c340 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  n(exists!=0,2);.
2c350 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
2c360 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2c370 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  ;.  }.  if( iSet
2c380 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
2c390 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2c3a0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2c3b0 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
2c3c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2c3d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2c3e0 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
2c3f0 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
2c400 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2c410 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
2c420 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
2c430 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
2c440 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
2c450 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
2c460 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
2c470 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
2c480 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
2c490 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
2c4a0 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
2c4b0 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
2c4c0 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
2c4d0 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
2c4e0 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
2c4f0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2c500 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
2c510 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
2c520 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
2c530 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
2c540 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
2c550 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
2c560 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
2c570 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
2c580 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
2c590 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
2c5a0 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
2c5b0 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
2c5c0 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
2c5d0 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
2c5e0 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
2c5f0 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
2c600 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2c610 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
2c620 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
2c630 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ogram..**.** If 
2c640 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P5 is non-zero, 
2c650 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70  then recursive p
2c660 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f  rogram invocatio
2c670 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f  n is enabled..*/
2c680 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d  .case OP_Program
2c690 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2c6a0 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  mp */.  int nMem
2c6b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2c6c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
2c6d0 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f  ory registers fo
2c6e0 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2c6f0 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
2c700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
2c710 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73  tes of runtime s
2c720 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
2c730 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
2c740 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20  .  Mem *pRt;    
2c750 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
2c760 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61  gister to alloca
2c770 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  te runtime space
2c780 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
2c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c7a0 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65   Used to iterate
2c7b0 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20   through memory 
2c7c0 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  cells */.  Mem *
2c7d0 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
2c7e0 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72     /* Last memor
2c7f0 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72  y cell in new ar
2c800 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ray */.  VdbeFra
2c810 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
2c820 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61   /* New vdbe fra
2c830 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e  me to execute in
2c840 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
2c850 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
2c860 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20   Sub-program to 
2c870 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69  execute */.  voi
2c880 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20  d *t;           
2c890 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64       /* Token id
2c8a0 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65  entifying trigge
2c8b0 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d  r */..  pProgram
2c8c0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67   = pOp->p4.pProg
2c8d0 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d  ram;.  pRt = &aM
2c8e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2c8f0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2c900 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f  >nOp>0 );.  .  /
2c910 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67  * If the p5 flag
2c920 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
2c930 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
2c940 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
2c950 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
2c960 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
2c970 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28   compatibility (
2c980 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69  p5 is set if thi
2c990 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20  s sub-program.  
2c9a0 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74  ** is really a t
2c9b0 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f  rigger, not a fo
2c9c0 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
2c9d0 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73  , and the flag s
2c9e0 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61  et.  ** and clea
2c9f0 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47  red by the "PRAG
2ca00 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69  MA recursive_tri
2ca10 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69  ggers" command i
2ca20 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a  s clear)..  ** .
2ca30 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72    ** It is recur
2ca40 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
2ca50 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20  of triggers, at 
2ca60 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74  the SQL level, t
2ca70 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  hat is .  ** dis
2ca80 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63  abled. In some c
2ca90 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72  ases a single tr
2caa0 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61  igger may genera
2cab0 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  te more than one
2cac0 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61   .  ** SubProgra
2cad0 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65  m (if the trigge
2cae0 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r may be execute
2caf0 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  d with more than
2cb00 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a   one different .
2cb10 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    ** ON CONFLICT
2cb20 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62   algorithm). Sub
2cb30 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72  Program structur
2cb40 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
2cb50 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  th a.  ** single
2cb60 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76   trigger all hav
2cb70 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
2cb80 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67   for the SubProg
2cb90 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20  ram.token .  ** 
2cba0 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20  variable.  */.  
2cbb0 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
2cbc0 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d     t = pProgram-
2cbd0 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28  >token;.    for(
2cbe0 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2cbf0 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61  ; pFrame && pFra
2cc00 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46  me->token!=t; pF
2cc10 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
2cc20 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70  rent);.    if( p
2cc30 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20  Frame ) break;. 
2cc40 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72   }..  if( p->nFr
2cc50 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b  ame>=db->aLimit[
2cc60 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
2cc70 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20  GGER_DEPTH] ){. 
2cc80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
2cc90 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
2cca0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74  3VdbeError(p, "t
2ccb0 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
2ccc0 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
2ccd0 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
2cce0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
2ccf0 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
2cd00 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
2cd10 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
2cd20 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
2cd30 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
2cd40 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
2cd50 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2cd60 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
2cd70 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
2cd80 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2cd90 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
2cda0 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
2cdb0 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
2cdc0 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
2cdd0 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
2cde0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
2cdf0 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
2ce00 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
2ce10 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
2ce20 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
2ce30 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
2ce40 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
2ce50 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
2ce60 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
2ce70 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
2ce80 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
2ce90 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
2cea0 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
2ceb0 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
2cec0 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
2ced0 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
2cee0 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
2cef0 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2cf00 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2cf10 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2cf20 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2cf30 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2cf40 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2cf50 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2cf60 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2cf70 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2cf80 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2cf90 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2cfb0 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2cfc0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2cfd0 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2cfe0 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2cff0 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2d000 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2d010 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2d020 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2d030 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2d040 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2d050 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2d060 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2d070 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2d080 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2d090 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2d0a0 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2d0b0 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2d0c0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2d0d0 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2d0e0 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2d0f0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2d100 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2d110 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2d120 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2d130 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2d140 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
2d150 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  p);.    pFrame->
2d160 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
2d170 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
2d180 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
2d190 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
2d1a0 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
2d1b0 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
2d1c0 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
2d1d0 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
2d1e0 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
2d1f0 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
2d200 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
2d210 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
2d220 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  ken;.    pFrame-
2d230 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >aOnceFlag = p->
2d240 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70  aOnceFlag;.    p
2d250 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67  Frame->nOnceFlag
2d260 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b   = p->nOnceFlag;
2d270 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2d280 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
2d290 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65  TATUS.    pFrame
2d2a0 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e  ->anExec = p->an
2d2b0 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  Exec;.#endif..  
2d2c0 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72    pEnd = &VdbeFr
2d2d0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70  ameMem(pFrame)[p
2d2e0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2d2f0 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d  ];.    for(pMem=
2d300 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2d310 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64  ame); pMem!=pEnd
2d320 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20  ; pMem++){.     
2d330 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d   pMem->flags = M
2d340 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
2d350 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64      pMem->db = d
2d360 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  b;.    }.  }else
2d370 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  {.    pFrame = p
2d380 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20  Rt->u.pFrame;.  
2d390 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2d3a0 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61  am->nMem+pProgra
2d3b0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2d3c0 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20  >nChildMem );.  
2d3d0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
2d3e0 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
2d3f0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20  ->nChildCsr );. 
2d400 20 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29     assert( (int)
2d410 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72  (pOp - aOp)==pFr
2d420 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a  ame->pc );.  }..
2d430 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20    p->nFrame++;. 
2d440 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
2d450 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
2d460 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69  pFrame->lastRowi
2d470 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
2d480 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
2d490 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
2d4a0 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e   pFrame->nDbChan
2d4b0 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61  ge = p->db->nCha
2d4c0 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  nge;.  p->nChang
2d4d0 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
2d4e0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
2d4f0 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
2d500 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
2d510 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e  rame)[-1];.  p->
2d520 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
2d530 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
2d540 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
2d550 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
2d560 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
2d570 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
2d580 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20  em[p->nMem+1];. 
2d590 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20   p->aOp = aOp = 
2d5a0 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20  pProgram->aOp;. 
2d5b0 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72   p->nOp = pProgr
2d5c0 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f  am->nOp;.  p->aO
2d5d0 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29  nceFlag = (u8 *)
2d5e0 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75  &p->apCsr[p->nCu
2d5f0 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63  rsor];.  p->nOnc
2d600 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d  eFlag = pProgram
2d610 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20  ->nOnce;.#ifdef 
2d620 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2d630 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
2d640 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23  p->anExec = 0;.#
2d650 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61  endif.  pOp = &a
2d660 4f 70 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65 74  Op[-1];.  memset
2d670 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30  (p->aOnceFlag, 0
2d680 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b  , p->nOnceFlag);
2d690 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
2d6a0 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50   Opcode: Param P
2d6b0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2d6c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
2d6d0 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e  only ever presen
2d6e0 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d  t in sub-program
2d6f0 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65  s called via the
2d700 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20   .** OP_Program 
2d710 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70  instruction. Cop
2d720 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e  y a value curren
2d730 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  tly stored in a 
2d740 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
2d750 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28  of the calling (
2d760 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f  parent) frame to
2d770 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20   cell P2 in the 
2d780 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a  current frames .
2d790 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65  ** address space
2d7a0 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
2d7b0 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
2d7c0 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ms to access the
2d7d0 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f   new.* .** and o
2d7e0 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  ld.* values..**.
2d7f0 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f  ** The address o
2d800 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68  f the cell in th
2d810 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69  e parent frame i
2d820 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
2d830 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61  adding.** the va
2d840 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
2d850 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61  gument to the va
2d860 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
2d870 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a  gument to the.**
2d880 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
2d890 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
2d8a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61  .*/.case OP_Para
2d8b0 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  m: {           /
2d8c0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65  * out2 */.  Vdbe
2d8d0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2d8e0 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75   Mem *pIn;.  pOu
2d8f0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2d900 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46  se(p, pOp);.  pF
2d910 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
2d920 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d  ;.  pIn = &pFram
2d930 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20  e->aMem[pOp->p1 
2d940 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46  + pFrame->aOp[pF
2d950 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20  rame->pc].p1];  
2d960 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d   .  sqlite3VdbeM
2d970 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
2d980 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68  ut, pIn, MEM_Eph
2d990 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  em);.  break;.}.
2d9a0 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64  .#endif /* #ifnd
2d9b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2d9c0 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64  RIGGER */..#ifnd
2d9d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2d9e0 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70  OREIGN_KEY./* Op
2d9f0 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20  code: FkCounter 
2da00 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2da10 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50  ynopsis: fkctr[P
2da20 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63  1]+=P2.**.** Inc
2da30 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72  rement a "constr
2da40 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79  aint counter" by
2da50 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e   P2 (P2 may be n
2da60 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
2da70 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69  ive)..** If P1 i
2da80 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20  s non-zero, the 
2da90 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
2daa0 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69  int counter is i
2dab0 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28  ncremented .** (
2dac0 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e  deferred foreign
2dad0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2dae0 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ). Otherwise, if
2daf0 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
2db00 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63   .** statement c
2db10 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d  ounter is increm
2db20 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65  ented (immediate
2db30 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2db40 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61  straints)..*/.ca
2db50 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a  se OP_FkCounter:
2db60 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61   {.  if( db->fla
2db70 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65  gs & SQLITE_Defe
2db80 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e  rFKs ){.    db->
2db90 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2dba0 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2dbb0 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31  else if( pOp->p1
2dbc0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
2dbd0 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70  erredCons += pOp
2dbe0 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->p2;.  }else{. 
2dbf0 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61     p->nFkConstra
2dc00 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  int += pOp->p2;.
2dc10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2dc20 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a  /* Opcode: FkIfZ
2dc30 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2dc40 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2dc50 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74  fkctr[P1]==0 got
2dc60 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
2dc70 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20  opcode tests if 
2dc80 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  a foreign key co
2dc90 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2dca0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
2dcb0 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75  ro..** If so, ju
2dcc0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2dcd0 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  n P2. Otherwise,
2dce0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2dcf0 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e   the next .** in
2dd00 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
2dd10 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2dd20 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d  ro, then the jum
2dd30 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2dd40 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
2dd50 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a  raint-counter.**
2dd60 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e   is zero (the on
2dd70 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65  e that counts de
2dd80 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e  ferred constrain
2dd90 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49  t violations). I
2dda0 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c  f P1 is.** zero,
2ddb0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2ddc0 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d  en if the statem
2ddd0 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ent constraint-c
2dde0 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a  ounter is zero.*
2ddf0 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  * (immediate for
2de00 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2de10 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
2de20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66  .*/.case OP_FkIf
2de30 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Zero: {         
2de40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
2de50 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2de60 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2de70 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2de80 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
2de90 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
2dea0 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d   2);.    if( db-
2deb0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2dec0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2ded0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67  edImmCons==0 ) g
2dee0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2def0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
2df00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
2df10 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2df20 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2df30 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
2df40 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43  .    if( p->nFkC
2df50 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2df60 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2df70 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  Cons==0 ) goto j
2df80 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2df90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2dfa0 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2dfb0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2dfc0 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  KEY */..#ifndef 
2dfd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2dfe0 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63  INCREMENT./* Opc
2dff0 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50  ode: MemMax P1 P
2e000 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2e010 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72  sis: r[P1]=max(r
2e020 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  [P1],r[P2]).**.*
2e030 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74  * P1 is a regist
2e040 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
2e050 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20  rame of this VM 
2e060 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20  (the root frame 
2e070 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20  is.** different 
2e080 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
2e090 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69   frame if this i
2e0a0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65  nstruction is be
2e0b0 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20  ing executed.** 
2e0c0 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f  within a sub-pro
2e0d0 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76  gram). Set the v
2e0e0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2e0f0 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d   P1 to the maxim
2e100 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75  um of .** its cu
2e110 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20  rrent value and 
2e120 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
2e130 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2e140 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
2e150 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
2e160 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   if the memory c
2e170 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ell is not initi
2e180 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67  ally.** an integ
2e190 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  er..*/.case OP_M
2e1a0 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20  emMax: {        
2e1b0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
2e1c0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
2e1d0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
2e1e0 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  {.    for(pFrame
2e1f0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2e200 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
2e210 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2e220 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d  ent);.    pIn1 =
2e230 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
2e240 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65  Op->p1];.  }else
2e250 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d  {.    pIn1 = &aM
2e260 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
2e270 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
2e280 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
2e290 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
2e2a0 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
2e2b0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2e2c0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
2e2d0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2e2e0 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66  rify(pIn2);.  if
2e2f0 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32  ( pIn1->u.i<pIn2
2e300 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31  ->u.i){.    pIn1
2e310 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e  ->u.i = pIn2->u.
2e320 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  i;.  }.  break;.
2e330 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2e340 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
2e350 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  EMENT */../* Opc
2e360 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32  ode: IfPos P1 P2
2e370 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2e380 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67  is: if r[P1]>0 g
2e390 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
2e3a0 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
2e3b0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2e3c0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
2e3d0 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2e3e0 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
2e3f0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e 64  , jump to P2 and
2e400 0a 2a 2a 20 61 64 64 20 74 68 65 20 6c 69 74 65  .** add the lite
2e410 72 61 6c 20 76 61 6c 75 65 20 50 33 20 74 6f 20  ral value P3 to 
2e420 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2e430 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61  ** If the initia
2e440 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  l value of regis
2e450 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
2e460 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a  han 1, then the.
2e470 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68  ** value is unch
2e480 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f  anged and contro
2e490 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68  l passes through
2e4a0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2e4b0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2e4c0 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
2e4d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2e4e0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2e4f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2e500 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2e510 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2e520 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2e530 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32  ( pIn1->u.i>0, 2
2e540 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2e550 2e 69 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  .i>0 ) goto jump
2e560 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2e570 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2e580 66 4e 65 67 20 50 31 20 50 32 20 50 33 20 2a 20  fNeg P1 P2 P3 * 
2e590 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2e5a0 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50  [P1]+=P3, if r[P
2e5b0 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]<0 goto P2.**.
2e5c0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
2e5d0 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
2e5e0 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74  nteger.  Add lit
2e5f0 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 20 76  eral P3 to the v
2e600 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  alue in.** regis
2e610 74 65 72 20 50 31 20 74 68 65 6e 20 69 66 20 74  ter P1 then if t
2e620 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2e630 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20  ster P1 is less 
2e640 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20  than zero, jump 
2e650 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20  to P2. .*/.case 
2e660 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
2e670 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2e680 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2e690 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2e6a0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2e6b0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
2e6c0 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
2e6d0 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  >p3;.  VdbeBranc
2e6e0 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2e6f0 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  <0, 2);.  if( pI
2e700 6e 31 2d 3e 75 2e 69 3c 30 20 29 20 67 6f 74 6f  n1->u.i<0 ) goto
2e710 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
2e720 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2e730 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31  de: IfNotZero P1
2e740 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2e750 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
2e760 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2b 3d  !=0 then r[P1]+=
2e770 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3, goto P2.**.*
2e780 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
2e790 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
2e7a0 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63  teger.  If the c
2e7b0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
2e7c0 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74  er P1 is.** init
2e7d0 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74  ially nonzero, t
2e7e0 68 65 6e 20 61 64 64 20 50 33 20 74 6f 20 50 31  hen add P3 to P1
2e7f0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e   and jump to P2.
2e800 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31    If register P1
2e810 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79   is.** initially
2e820 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20   zero, leave it 
2e830 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61  unchanged and fa
2e840 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
2e850 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f  ase OP_IfNotZero
2e860 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2e870 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2e880 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2e890 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2e8a0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2e8b0 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2e8c0 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2e8d0 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  <0, 2);.  if( pI
2e8e0 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20  n1->u.i ){.     
2e8f0 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
2e900 2d 3e 70 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20  ->p3;.     goto 
2e910 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
2e920 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e930 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
2e940 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
2e950 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2e960 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
2e970 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2e980 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
2e990 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
2e9a0 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
2e9b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
2e9c0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
2e9d0 20 50 32 20 69 66 20 74 68 65 20 6e 65 77 20 76   P2 if the new v
2e9e0 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c 79 20  alue is exactly 
2e9f0 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
2ea00 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b  _DecrJumpZero: {
2ea10 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2ea20 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
2ea30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ea40 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
2ea50 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2ea60 20 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20    pIn1->u.i--;. 
2ea70 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2ea80 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32  (pIn1->u.i==0, 2
2ea90 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
2eaa0 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  .i==0 ) goto jum
2eab0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2eac0 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
2ead0 20 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50 31   JumpZeroIncr P1
2eae0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2eaf0 6f 70 73 69 73 3a 20 69 66 20 28 72 5b 50 31 5d  opsis: if (r[P1]
2eb00 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50 32  ++)==0 ) goto P2
2eb10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
2eb20 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2eb30 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2eb40 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
2eb50 69 73 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  is initially.** 
2eb60 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
2eb70 74 6f 20 50 32 2e 20 20 49 6e 63 72 65 6d 65 6e  to P2.  Incremen
2eb80 74 20 72 65 67 69 73 74 65 72 20 50 31 20 72 65  t register P1 re
2eb90 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
2eba0 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68  her or.** not th
2ebb0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2e  e jump is taken.
2ebc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
2ebd0 5a 65 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20 20  ZeroIncr: {     
2ebe0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2ebf0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2ec00 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2ec10 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2ec20 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2ec30 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2ec40 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b  In1->u.i==0, 2);
2ec50 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 75 2e  .  if( (pIn1->u.
2ec60 69 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  i++)==0 ) goto j
2ec70 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2ec80 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ec90 3a 20 41 67 67 53 74 65 70 30 20 2a 20 50 32 20  : AggStep0 * P2 
2eca0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2ecb0 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
2ecc0 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
2ecd0 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2ece0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2ecf0 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2ed00 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
2ed10 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
2ed20 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
2ed30 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2ed40 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
2ed50 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
2ed60 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
2ed70 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73    Register P3 is
2ed80 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61   the.** accumula
2ed90 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
2eda0 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
2edb0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
2edc0 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
2edd0 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
2ede0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
2edf0 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50  tep * P2 P3 P4 P
2ee00 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
2ee10 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
2ee20 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
2ee30 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70  Execute the step
2ee40 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
2ee50 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
2ee60 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  .** function has
2ee70 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
2ee80 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2ee90 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63   to an sqlite3_c
2eea0 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63 74  ontext.** object
2eeb0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2eec0 20 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69 6f   run the functio
2eed0 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  n.  Register P3 
2eee0 69 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63 63  is.** as the acc
2eef0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
2ef00 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
2ef10 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
2ef20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
2ef30 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
2ef40 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
2ef50 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c  code is initiall
2ef60 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67  y coded as OP_Ag
2ef70 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73  gStep0.  On firs
2ef80 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a  t evaluation,.**
2ef90 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f   the FuncDef sto
2efa0 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e  red in P4 is con
2efb0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73  verted into an s
2efc0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61  qlite3_context a
2efd0 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65  nd.** the opcode
2efe0 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e   is changed.  In
2eff0 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69   this way, the i
2f000 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  nitialization of
2f010 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
2f020 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70  context only hap
2f030 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65  pens once, inste
2f040 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61  ad of on each ca
2f050 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65  ll to the.** ste
2f060 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  p function..*/.c
2f070 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30 3a  ase OP_AggStep0:
2f080 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71   {.  int n;.  sq
2f090 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
2f0a0 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
2f0b0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2f0c0 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d  FUNCDEF );.  n =
2f0d0 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
2f0e0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2f0f0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2f100 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2f110 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ;.  assert( n==0
2f120 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
2f130 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d  & pOp->p2+n<=(p-
2f140 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2f150 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  )+1) );.  assert
2f160 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
2f170 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
2f180 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74  p->p2+n );.  pCt
2f190 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  x = sqlite3DbMal
2f1a0 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f  locRaw(db, sizeo
2f1b0 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
2f1c0 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
2f1d0 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
2f1e0 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
2f1f0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
2f200 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Mem = 0;.  pCtx-
2f210 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
2f220 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
2f230 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
2f240 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
2f250 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
2f260 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
2f270 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
2f280 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
2f290 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
2f2a0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
2f2b0 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a  OP_AggStep;.  /*
2f2c0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
2f2d0 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f  to OP_AggStep */
2f2e0 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  .}.case OP_AggSt
2f2f0 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ep: {.  int i;. 
2f300 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
2f310 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
2f320 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20  Mem;.  Mem t;.. 
2f330 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2f340 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58  type==P4_FUNCCTX
2f350 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70   );.  pCtx = pOp
2f360 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65  ->p4.pCtx;.  pMe
2f370 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2f380 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  3];..  /* If thi
2f390 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  s function is in
2f3a0 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65  side of a trigge
2f3b0 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20  r, the register 
2f3c0 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a  array in aMem[].
2f3d0 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67    ** might chang
2f3e0 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75  e from one evalu
2f3f0 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78  ation to the nex
2f400 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  t.  The next blo
2f410 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20  ck of code.  ** 
2f420 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
2f430 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
2f440 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ray has changed,
2f450 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20   and if so it.  
2f460 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73  ** reinitializes
2f470 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61   the relavant pa
2f480 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  rts of the sqlit
2f490 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
2f4a0 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  t */.  if( pCtx-
2f4b0 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b  >pMem != pMem ){
2f4c0 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20  .    pCtx->pMem 
2f4d0 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28  = pMem;.    for(
2f4e0 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20  i=pCtx->argc-1; 
2f4f0 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d  i>=0; i--) pCtx-
2f500 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d  >argv[i] = &aMem
2f510 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d  [pOp->p2+i];.  }
2f520 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2f530 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
2f540 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
2f550 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
2f560 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
2f570 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
2f580 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
2f590 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
2f5a0 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
2f5b0 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e  #endif..  pMem->
2f5c0 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n++;.  sqlite3Vd
2f5d0 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62  beMemInit(&t, db
2f5e0 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
2f5f0 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a  Ctx->pOut = &t;.
2f600 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72    pCtx->fErrorOr
2f610 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Aux = 0;.  pCtx-
2f620 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
2f630 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78   (pCtx->pFunc->x
2f640 53 74 65 70 29 28 70 43 74 78 2c 70 43 74 78 2d  Step)(pCtx,pCtx-
2f650 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76  >argc,pCtx->argv
2f660 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  ); /* IMP: R-245
2f670 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66  05-23230 */.  if
2f680 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72  ( pCtx->fErrorOr
2f690 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70  Aux ){.    if( p
2f6a0 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a  Ctx->isError ){.
2f6b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2f6c0 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
2f6d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
2f6e0 78 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20 72  xt(&t));.      r
2f6f0 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  c = pCtx->isErro
2f700 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  r;.    }.    sql
2f710 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2f720 73 65 28 26 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  se(&t);.  }else{
2f730 0a 20 20 20 20 61 73 73 65 72 74 28 20 74 2e 66  .    assert( t.f
2f740 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29  lags==MEM_Null )
2f750 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43 74 78  ;.  }.  if( pCtx
2f760 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  ->skipFlag ){.  
2f770 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2f780 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
2f790 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20 3d 20  lSeq );.    i = 
2f7a0 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20  pOp[-1].p1;.    
2f7b0 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
2f7c0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2f7d0 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d  aMem[i], 1);.  }
2f7e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f7f0 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c  Opcode: AggFinal
2f800 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
2f810 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2f820 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a  =r[P1] N=P2.**.*
2f830 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
2f840 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
2f850 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2f860 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
2f870 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
2f880 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
2f890 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
2f8a0 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
2f8b0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
2f8c0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2f8d0 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
2f8e0 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
2f8f0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2f900 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2f910 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
2f920 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
2f930 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
2f940 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
2f950 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
2f960 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
2f970 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
2f980 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
2f990 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
2f9a0 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
2f9b0 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
2f9c0 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
2f9d0 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
2f9e0 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
2f9f0 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
2fa00 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
2fa10 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
2fa20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2fa30 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
2fa40 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
2fa50 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
2fa60 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
2fa70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2fa80 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2fa90 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2faa0 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
2fab0 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41  ~(MEM_Null|MEM_A
2fac0 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  gg))==0 );.  rc 
2fad0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
2fae0 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70  Finalize(pMem, p
2faf0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
2fb00 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
2fb10 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
2fb20 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
2fb30 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
2fb40 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
2fb50 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
2fb60 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69  ing(pMem, encodi
2fb70 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
2fb80 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29  X_BLOBSIZE(pMem)
2fb90 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
2fba0 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65  dbeMemTooBig(pMe
2fbb0 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  m) ){.    goto t
2fbc0 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72  oo_big;.  }.  br
2fbd0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
2fbe0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2fbf0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b  /* Opcode: Check
2fc00 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a  point P1 P2 P3 *
2fc10 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f   *.**.** Checkpo
2fc20 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31 2e  int database P1.
2fc30 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70   This is a no-op
2fc40 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75   if P1 is not cu
2fc50 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41  rrently in.** WA
2fc60 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65  L mode. Paramete
2fc70 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53  r P2 is one of S
2fc80 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2fc90 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a  _PASSIVE, FULL,.
2fca0 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54  ** RESTART, or T
2fcb0 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20  RUNCATE.  Write 
2fcc0 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b  1 or 0 into mem[
2fcd0 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b  P3] if the check
2fce0 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a  point returns.**
2fcf0 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20   SQLITE_BUSY or 
2fd00 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c  not, respectivel
2fd10 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e 75  y.  Write the nu
2fd20 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
2fd30 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65   the.** WAL afte
2fd40 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  r the checkpoint
2fd50 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20   into mem[P3+1] 
2fd60 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  and the number o
2fd70 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68  f pages.** in th
2fd80 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20  e WAL that have 
2fd90 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65  been checkpointe
2fda0 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  d after the chec
2fdb0 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65  kpoint.** comple
2fdc0 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  tes into mem[P3+
2fdd0 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20  2].  However on 
2fde0 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33  an error, mem[P3
2fdf0 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50  +1] and.** mem[P
2fe00 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c  3+2] are initial
2fe10 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63  ized to -1..*/.c
2fe20 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  ase OP_Checkpoin
2fe30 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20  t: {.  int i;   
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe50 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
2fe60 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20  ounter */.  int 
2fe70 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20  aRes[3];        
2fe80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2fe90 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20  esults */.  Mem 
2fea0 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
2fec0 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65 72  rite results her
2fed0 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  e */..  assert( 
2fee0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2fef0 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b  ;.  aRes[0] = 0;
2ff00 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65  .  aRes[1] = aRe
2ff10 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73  s[2] = -1;.  ass
2ff20 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ert( pOp->p2==SQ
2ff30 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2ff40 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c  PASSIVE.       |
2ff50 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
2ff60 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c  E_CHECKPOINT_FUL
2ff70 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  L.       || pOp-
2ff80 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
2ff90 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20  KPOINT_RESTART. 
2ffa0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2ffb0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2ffc0 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29  INT_TRUNCATE.  )
2ffd0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2ffe0 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70  Checkpoint(db, p
2fff0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
30000 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73   &aRes[1], &aRes
30010 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  [2]);.  if( rc==
30020 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
30030 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
30040 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
30050 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
30060 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
30070 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
30080 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
30090 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
300a0 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
300b0 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
300c0 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
300d0 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
300e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
300f0 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
30100 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
30110 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
30120 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
30130 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
30140 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
30150 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
30160 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
30170 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
30180 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
30190 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
301a0 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
301b0 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
301c0 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
301d0 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
301e0 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
301f0 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
30200 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
30210 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
30220 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
30230 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
30240 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
30250 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
30260 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
30270 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
30280 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
30290 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
302a0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
302b0 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
302c0 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a  : {    /* out2 *
302d0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
302e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302f0 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
30300 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
30310 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
30320 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
30330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
30340 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
30350 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
30360 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
30370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30380 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
30390 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
303a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303b0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
303c0 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
303d0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
303e0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
303f0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
30400 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
30410 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
30420 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
30430 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75  */.#endif..  pOu
30440 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
30450 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e  se(p, pOp);.  eN
30460 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
30470 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
30480 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30490 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
304a0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
304b0 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
304c0 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
304d0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
304e0 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
304f0 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
30500 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
30510 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
30520 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
30530 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
30540 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
30550 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
30560 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
30570 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
30580 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
30590 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
305a0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
305b0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
305c0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
305d0 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d  y==0 );..  pBt =
305e0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
305f0 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20  ].pBt;.  pPager 
30600 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
30610 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64  ger(pBt);.  eOld
30620 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47   = sqlite3PagerG
30630 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
30640 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65  ager);.  if( eNe
30650 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
30660 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65  MODE_QUERY ) eNe
30670 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20  w = eOld;.  if( 
30680 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54  !sqlite3PagerOkT
30690 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f  oChangeJournalMo
306a0 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65  de(pPager) ) eNe
306b0 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64  w = eOld;..#ifnd
306c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
306d0 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  AL.  zFilename =
306e0 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
306f0 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29  ename(pPager, 1)
30700 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
30710 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
30720 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
30730 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
30740 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
30750 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
30760 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
30770 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68  s not support sh
30780 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a  ared memory .  *
30790 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  /.  if( eNew==PA
307a0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
307b0 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74  WAL.   && (sqlit
307c0 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
307d0 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20  name)==0        
307e0 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20     /* Temp file 
307f0 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71  */.       || !sq
30800 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70  lite3PagerWalSup
30810 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20  ported(pPager)) 
30820 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d    /* No shared-m
30830 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f  emory support */
30840 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  .  ){.    eNew =
30850 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66   eOld;.  }..  if
30860 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20  ( (eNew!=eOld). 
30870 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45    && (eOld==PAGE
30880 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
30890 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52  L || eNew==PAGER
308a0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
308b0 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ).  ){.    if( !
308c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c  db->autoCommit |
308d0 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
308e0 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
308f0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
30900 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
30910 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20  rror(p,.        
30920 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65    "cannot change
30930 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f   %s wal mode fro
30940 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
30950 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20  action",.       
30960 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f     (eNew==PAGER_
30970 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
30980 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20  ? "into" : "out 
30990 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  of").      );.  
309a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
309b0 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
309c0 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
309d0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
309e0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
309f0 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
30a00 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
30a10 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
30a20 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
30a30 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
30a40 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
30a50 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
30a60 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
30a70 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
30a80 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
30a90 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
30aa0 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
30ab0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
30ac0 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
30ad0 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
30ae0 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
30af0 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
30b00 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
30b10 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a  oseWal(pPager);.
30b20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
30b30 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
30b40 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
30b50 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
30b60 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
30b70 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
30b80 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
30b90 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
30ba0 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
30bb0 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
30bc0 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
30bd0 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
30be0 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
30bf0 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
30c00 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
30c10 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
30c20 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
30c30 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
30c40 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
30c50 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
30c60 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
30c70 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
30c80 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
30c90 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
30ca0 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
30cb0 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
30cc0 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
30cd0 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
30ce0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
30cf0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
30d00 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
30d10 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
30d20 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
30d30 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
30d40 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
30d50 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
30d60 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
30d70 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
30d80 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
30d90 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
30da0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
30db0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30dc0 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
30dd0 20 72 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20   rc ){.    eNew 
30de0 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e  = eOld;.  }.  eN
30df0 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ew = sqlite3Page
30e00 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
30e10 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a  pPager, eNew);..
30e20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
30e30 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
30e40 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
30e50 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a  Out->z = (char *
30e60 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  )sqlite3JournalM
30e70 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20  odename(eNew);. 
30e80 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74   pOut->n = sqlit
30e90 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d  e3Strlen30(pOut-
30ea0 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >z);.  pOut->enc
30eb0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a   = SQLITE_UTF8;.
30ec0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
30ed0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
30ee0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62  , encoding);.  b
30ef0 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20  reak;.};.#endif 
30f00 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
30f10 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64  RAGMA */..#if !d
30f20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
30f30 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64  IT_VACUUM) && !d
30f40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
30f50 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70  IT_ATTACH)./* Op
30f60 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a  code: Vacuum * *
30f70 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63   * * *.**.** Vac
30f80 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64  uum the entire d
30f90 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f  atabase.  This o
30fa0 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65  pcode will cause
30fb0 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a   other virtual.*
30fc0 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65  * machines to be
30fd0 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e   created and run
30fe0 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65  .  It may not be
30ff0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
31000 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63  hin.** a transac
31010 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
31020 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73  _Vacuum: {.  ass
31030 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
31040 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
31050 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
31060 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b  p->zErrMsg, db);
31070 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31080 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  if..#if !defined
31090 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  (SQLITE_OMIT_AUT
310a0 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f  OVACUUM)./* Opco
310b0 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50  de: IncrVacuum P
310c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
310d0 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c   Perform a singl
310e0 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e  e step of the in
310f0 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
31100 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a   procedure on.**
31110 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65   the P1 database
31120 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20  . If the vacuum 
31130 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75  has finished, ju
31140 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
31150 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69  n.** P2. Otherwi
31160 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
31170 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
31180 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
31190 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a  e OP_IncrVacuum:
311a0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
311b0 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  p */.  Btree *pB
311c0 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
311d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
311e0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
311f0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
31200 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
31210 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
31220 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
31230 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20  nly==0 );.  pBt 
31240 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
31250 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73  1].pBt;.  rc = s
31260 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56  qlite3BtreeIncrV
31270 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64  acuum(pBt);.  Vd
31280 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63  beBranchTaken(rc
31290 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29  ==SQLITE_DONE,2)
312a0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
312b0 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 72  TE_DONE ){.    r
312c0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
312d0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
312e0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
312f0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
31300 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20  code: Expire P1 
31310 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61  * * * *.**.** Ca
31320 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20  use precompiled 
31330 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78  statements to ex
31340 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65  pire.  When an e
31350 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74  xpired statement
31360 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 20  .** is executed 
31370 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74  using sqlite3_st
31380 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74  ep() it will eit
31390 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  her automaticall
313a0 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69  y.** reprepare i
313b0 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61 73  tself (if it was
313c0 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61   originally crea
313d0 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ted using sqlite
313e0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a  3_prepare_v2()).
313f0 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61  ** or it will fa
31400 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53  il with SQLITE_S
31410 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66  CHEMA..** .** If
31420 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61   P1 is 0, then a
31430 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll SQL statement
31440 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  s become expired
31450 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  . If P1 is non-z
31460 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c  ero,.** then onl
31470 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  y the currently 
31480 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
31490 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a  ent is expired..
314a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
314b0 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d  e: {.  if( !pOp-
314c0 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
314d0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
314e0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
314f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
31500 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
31510 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
31520 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31530 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
31540 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f   Opcode: TableLo
31550 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ck P1 P2 P3 P4 *
31560 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44  .** Synopsis: iD
31570 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69  b=P1 root=P2 wri
31580 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61  te=P3.**.** Obta
31590 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
315a0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
315b0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
315c0 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
315d0 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
315e0 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
315f0 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
31600 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
31610 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
31620 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
31630 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
31640 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
31650 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
31660 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
31670 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
31680 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
31690 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
316a0 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
316b0 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
316c0 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
316d0 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
316e0 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
316f0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
31700 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
31710 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
31720 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
31730 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
31740 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
31750 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
31760 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
31770 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
31780 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
31790 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
317a0 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
317b0 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
317c0 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
317d0 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
317e0 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
317f0 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
31800 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
31810 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
31820 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
31830 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
31840 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61  sk, p1) );.    a
31850 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
31860 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
31870 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
31880 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
31890 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
318a0 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
318b0 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
318c0 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  ;.    if( (rc&0x
318d0 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
318e0 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  ED ){.      cons
318f0 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
31900 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c  >p4.z;.      sql
31910 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
31920 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
31930 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
31940 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
31950 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31960 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31970 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
31980 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31990 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
319a0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
319b0 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
319c0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
319d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
319e0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
319f0 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
31a00 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
31a10 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
31a20 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
31a30 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
31a40 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
31a50 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
31a60 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
31a70 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
31a80 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
31a90 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
31aa0 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
31ab0 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
31ac0 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
31ad0 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
31ae0 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
31af0 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
31b00 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
31b10 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
31b20 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
31b30 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
31b40 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
31b50 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74  f( pVTab ) sqlit
31b60 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
31b70 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74  sg(p, pVTab->pVt
31b80 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ab);.  break;.}.
31b90 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
31ba0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
31bb0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
31bc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31bd0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
31be0 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32  e: VCreate P1 P2
31bf0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20   * * *.**.** P2 
31c00 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
31c10 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  at holds the nam
31c20 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
31c30 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
31c40 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68   .** P1. Call th
31c50 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64  e xCreate method
31c60 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e   for that table.
31c70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65  .*/.case OP_VCre
31c80 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65  ate: {.  Mem sMe
31c90 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
31ca0 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
31cb0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
31cc0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ded */.  const c
31cd0 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e  har *zTab;  /* N
31ce0 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
31cf0 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d  al table */..  m
31d00 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
31d10 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
31d20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20   sMem.db = db;. 
31d30 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69   /* Because P2 i
31d40 73 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69  s always a stati
31d50 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20  c string, it is 
31d60 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74  impossible for t
31d70 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  he.  ** sqlite3V
31d80 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20  dbeMemCopy() to 
31d90 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74  fail */.  assert
31da0 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
31db0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  .flags & MEM_Str
31dc0 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
31dd0 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  ( (aMem[pOp->p2]
31de0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61  .flags & MEM_Sta
31df0 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20  tic)!=0 );.  rc 
31e00 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
31e10 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65  Copy(&sMem, &aMe
31e20 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61  m[pOp->p2]);.  a
31e30 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
31e40 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d  E_OK );.  zTab =
31e50 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
31e60 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
31e70 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72  (&sMem);.  asser
31e80 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d  t( zTab || db->m
31e90 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
31ea0 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20   if( zTab ){.   
31eb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
31ec0 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20  bCallCreate(db, 
31ed0 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26  pOp->p1, zTab, &
31ee0 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
31ef0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
31f00 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
31f10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31f20 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
31f30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
31f40 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
31f50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31f60 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
31f70 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50  Destroy P1 * * P
31f80 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
31f90 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
31fa0 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
31fb0 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c  atabase P1.  Cal
31fc0 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d  l the xDestroy m
31fd0 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74  ethod.** of that
31fe0 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
31ff0 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20  OP_VDestroy: {. 
32000 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b   db->nVDestroy++
32010 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
32020 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
32030 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
32040 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e  ->p4.z);.  db->n
32050 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 62 72  VDestroy--;.  br
32060 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
32070 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
32080 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
32090 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
320a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
320b0 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
320c0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
320d0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
320e0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
320f0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
32100 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
32110 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
32120 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
32130 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
32140 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
32150 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
32160 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
32170 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
32180 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
32190 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
321a0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
321b0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
321c0 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
321d0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
321e0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
321f0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
32200 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72  Module;..  asser
32210 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
32220 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20  );.  pCur = 0;. 
32230 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30   pVtabCursor = 0
32240 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ;.  pVtab = pOp-
32250 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
32260 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30  ;.  if( pVtab==0
32270 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d   || NEVER(pVtab-
32280 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a  >pModule==0) ){.
32290 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
322a0 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72 65 61  LOCKED;.    brea
322b0 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65  k;.  }.  pModule
322c0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
322d0 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
322e0 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20  e->xOpen(pVtab, 
322f0 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20  &pVtabCursor);. 
32300 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
32310 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
32320 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54 45  b);.  if( SQLITE
32330 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f  _OK==rc ){.    /
32340 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c  * Initialize sql
32350 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
32360 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20   base class */. 
32370 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e     pVtabCursor->
32380 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a  pVtab = pVtab;..
32390 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
323a0 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
323b0 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75 72  ject */.    pCur
323c0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
323d0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
323e0 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66 28   -1, 0);.    if(
323f0 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20 70   pCur ){.      p
32400 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
32410 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b 0a   = pVtabCursor;.
32420 20 20 20 20 20 20 70 56 74 61 62 2d 3e 6e 52 65        pVtab->nRe
32430 66 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  f++;.    }else{.
32440 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
32450 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
32460 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
32470 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
32480 73 6f 72 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  sor);.      goto
32490 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
324a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
324b0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
324c0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
324d0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
324e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
324f0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
32500 20 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50   VFilter P1 P2 P
32510 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
32520 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20  is: iplan=r[P3] 
32530 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  zplan='P4'.**.**
32540 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
32550 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70  opened using VOp
32560 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64  en.  P2 is an ad
32570 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
32580 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65   if.** the filte
32590 72 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69  red result set i
325a0 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50  s empty..**.** P
325b0 34 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c  4 is either NULL
325c0 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61   or a string tha
325d0 74 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20  t was generated 
325e0 62 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  by the xBestInde
325f0 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74  x.** method of t
32600 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  he module.  The 
32610 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
32620 66 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20  f the P4 string 
32630 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68  is left.** to th
32640 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  e module impleme
32650 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
32660 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
32670 65 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  es the xFilter m
32680 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72  ethod on the vir
32690 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69  tual table speci
326a0 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20  fied.** by P1.  
326b0 54 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72  The integer quer
326c0 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72  y plan parameter
326d0 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73   to xFilter is s
326e0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
326f0 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65  r.** P3. Registe
32700 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68  r P3+1 stores th
32710 65 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  e argc parameter
32720 20 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f   to be passed to
32730 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20   the.** xFilter 
32740 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72  method. Register
32750 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67  s P3+2..P3+1+arg
32760 63 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a  c are the argc.*
32770 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72  * additional par
32780 61 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72  ameters which ar
32790 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78  e passed to.** x
327a0 46 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20  Filter as argv. 
327b0 52 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65  Register P3+2 be
327c0 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68  comes argv[0] wh
327d0 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69  en passed to xFi
327e0 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75  lter..**.** A ju
327f0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
32800 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73   if the result s
32810 65 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69  et after filteri
32820 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74  ng would be empt
32830 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46  y..*/.case OP_VF
32840 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75  ilter: {   /* ju
32850 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67  mp */.  int nArg
32860 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a  ;.  int iQuery;.
32870 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
32880 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
32890 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a  .  Mem *pQuery;.
328a0 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20    Mem *pArgc;.  
328b0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
328c0 73 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72  sor *pVtabCursor
328d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
328e0 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43   *pVtab;.  VdbeC
328f0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69  ursor *pCur;.  i
32900 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b  nt res;.  int i;
32910 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
32920 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65  .  pQuery = &aMe
32930 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41  m[pOp->p3];.  pA
32940 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d  rgc = &pQuery[1]
32950 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
32960 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
32970 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
32980 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20  id(pQuery) );.  
32990 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
329a0 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
329b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
329c0 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a  >pVtabCursor );.
329d0 20 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20    pVtabCursor = 
329e0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
329f0 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74  r;.  pVtab = pVt
32a00 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b  abCursor->pVtab;
32a10 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
32a20 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
32a30 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
32a40 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
32a50 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
32a60 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
32a70 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
32a80 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
32a90 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
32aa0 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
32ab0 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
32ac0 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
32ad0 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
32ae0 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
32af0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73   method */.  res
32b00 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20   = 0;.  apArg = 
32b10 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28  p->apArg;.  for(
32b20 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
32b30 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69  ++){.    apArg[i
32b40 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
32b50 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64  .  }.  rc = pMod
32b60 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74  ule->xFilter(pVt
32b70 61 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79  abCursor, iQuery
32b80 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72  , pOp->p4.z, nAr
32b90 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c  g, apArg);.  sql
32ba0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
32bb0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
32bc0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
32bd0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
32be0 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
32bf0 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
32c00 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
32c10 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
32c20 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
32c30 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
32c40 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
32c50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
32c60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
32c70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
32c80 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32c90 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
32ca0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
32cb0 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
32cc0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
32cd0 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32  r[P3]=vcolumn(P2
32ce0 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
32cf0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
32d00 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
32d10 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
32d20 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
32d30 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
32d40 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
32d50 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
32d60 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
32d70 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
32d80 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
32d90 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
32da0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
32db0 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
32dc0 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
32dd0 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
32de0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
32df0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
32e00 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
32e10 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72  ( pCur->pVtabCur
32e20 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
32e30 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
32e40 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
32e50 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
32e60 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
32e70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
32e80 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
32e90 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75  Dest);.  if( pCu
32ea0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
32eb0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
32ec0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
32ed0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
32ee0 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
32ef0 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
32f00 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
32f10 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
32f20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
32f30 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d  ->xColumn );.  m
32f40 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c  emset(&sContext,
32f50 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74   0, sizeof(sCont
32f60 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78  ext));.  sContex
32f70 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a  t.pOut = pDest;.
32f80 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
32f90 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
32fa0 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  );.  rc = pModul
32fb0 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
32fc0 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
32fd0 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
32fe0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
32ff0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
33000 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
33010 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
33020 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
33030 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
33040 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
33050 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65  angeEncoding(pDe
33060 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  st, encoding);. 
33070 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
33080 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
33090 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
330a0 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a  OBSIZE(pDest);..
330b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
330c0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74  eMemTooBig(pDest
330d0 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
330e0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65  o_big;.  }.  bre
330f0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
33100 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
33110 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
33120 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
33130 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
33140 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50   Opcode: VNext P
33150 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
33160 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c   Advance virtual
33170 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65   table P1 to the
33180 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73   next row in its
33190 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a   result set and.
331a0 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  ** jump to instr
331b0 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20  uction P2.  Or, 
331c0 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  if the virtual t
331d0 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64  able has reached
331e0 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69  .** the end of i
331f0 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74  ts result set, t
33200 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
33210 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
33220 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
33230 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20  e OP_VNext: {   
33240 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c  /* jump */.  sql
33250 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
33260 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
33270 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
33280 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  e;.  int res;.  
33290 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
332a0 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  ;..  res = 0;.  
332b0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
332c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
332d0 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43  rt( pCur->pVtabC
332e0 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70  ursor );.  if( p
332f0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
33300 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
33310 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70   pVtab = pCur->p
33320 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
33330 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
33340 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
33350 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
33360 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a  ->xNext );..  /*
33370 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78   Invoke the xNex
33380 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  t() method of th
33390 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20  e module. There 
333a0 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68  is no way for th
333b0 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  e.  ** underlyin
333c0 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  g implementation
333d0 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72   to return an er
333e0 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72  ror if one occur
333f0 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e  s during.  ** xN
33400 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20  ext(). Instead, 
33410 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
33420 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75  rs, true is retu
33430 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67  rned (indicating
33440 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61   that .  ** data
33450 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61   is available) a
33460 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  nd the error cod
33470 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  e returned when 
33480 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20  xColumn or.  ** 
33490 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f  some other metho
334a0 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65  d is next invoke
334b0 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69  d on the save vi
334c0 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
334d0 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20  or..  */.  rc = 
334e0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
334f0 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
33500 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
33510 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
33520 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
33530 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
33540 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
33550 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70 56 74  ->xEof(pCur->pVt
33560 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  abCursor);.  }. 
33570 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
33580 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20  (!res,2);.  if( 
33590 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
335a0 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
335b0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
335c0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
335d0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
335e0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a  _interrupt;.  }.
335f0 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
33600 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65  _interrupt;.}.#e
33610 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
33620 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
33630 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
33640 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33650 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
33660 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20   VRename P1 * * 
33670 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
33680 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
33690 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
336a0 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
336b0 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
336c0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
336d0 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
336e0 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d  esponding xRenam
336f0 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61  e method. The va
33700 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74  lue.** in regist
33710 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20  er P1 is passed 
33720 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67  as the zName arg
33730 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65  ument to the xRe
33740 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a  name method..*/.
33750 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a  case OP_VRename:
33760 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
33770 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20  b *pVtab;.  Mem 
33780 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62  *pName;..  pVtab
33790 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
337a0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65  ->pVtab;.  pName
337b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
337c0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74  ];.  assert( pVt
337d0 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
337e0 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74  name );.  assert
337f0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61  ( memIsValid(pNa
33800 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  me) );.  assert(
33810 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
33820 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
33830 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61  ACE(pOp->p1, pNa
33840 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  me);.  assert( p
33850 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Name->flags & ME
33860 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63  M_Str );.  testc
33870 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
33880 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a  =SQLITE_UTF8 );.
33890 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
338a0 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
338b0 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74  TF16BE );.  test
338c0 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
338d0 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  ==SQLITE_UTF16LE
338e0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
338f0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
33900 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49  ding(pName, SQLI
33910 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20  TE_UTF8);.  if( 
33920 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
33930 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d  .    rc = pVtab-
33940 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
33950 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e  e(pVtab, pName->
33960 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  z);.    sqlite3V
33970 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
33980 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70  p, pVtab);.    p
33990 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
339a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
339b0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
339c0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
339d0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
339e0 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20  : VUpdate P1 P2 
339f0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
33a00 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40  psis: data=r[P3@
33a10 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P2].**.** P4 is 
33a20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
33a30 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
33a40 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
33a50 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
33a60 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
33a70 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
33a80 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
33a90 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
33aa0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
33ab0 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
33ac0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
33ad0 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
33ae0 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
33af0 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
33b00 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50  e in register (P
33b10 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f  3+P2-1) correspo
33b20 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70  nds to the .** p
33b30 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  2th element of t
33b40 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61  he argv array pa
33b50 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e  ssed to xUpdate.
33b60 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61  .**.** The xUpda
33b70 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64  te method will d
33b80 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e  o a DELETE or an
33b90 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e   INSERT or both.
33ba0 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20  .** The argv[0] 
33bb0 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63  element (which c
33bc0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65  orresponds to me
33bd0 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a  mory cell P3).**
33be0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
33bf0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
33c00 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73  .  If argv[0] is
33c10 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a   NULL then no .*
33c20 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72  * deletion occur
33c30 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20  s.  The argv[1] 
33c40 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72  element is the r
33c50 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20  owid of the new 
33c60 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63  .** row.  This c
33c70 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61  an be NULL to ha
33c80 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  ve the virtual t
33c90 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20  able select the 
33ca0 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f  new .** rowid fo
33cb0 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73  r itself.  The s
33cc0 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e  ubsequent elemen
33cd0 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  ts in the array 
33ce0 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  are .** the valu
33cf0 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  es of columns in
33d00 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a   the new row..**
33d10 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65  .** If P2==1 the
33d20 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70  n no insert is p
33d30 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b  erformed.  argv[
33d40 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  0] is the rowid 
33d50 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64  of.** a row to d
33d60 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  elete..**.** P1 
33d70 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
33d80 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20  g. If it is set 
33d90 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20  to true and the 
33da0 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20  xUpdate call.** 
33db0 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  is successful, t
33dc0 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65  hen the value re
33dd0 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
33de0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
33df0 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74  wid() .** is set
33e00 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
33e10 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74   the rowid for t
33e20 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65  he row just inse
33e30 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  rted..**.** P5 i
33e40 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69  s the error acti
33e50 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c  ons (OE_Replace,
33e60 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e   OE_Fail, OE_Ign
33e70 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20  ore, etc) to.** 
33e80 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73  apply in the cas
33e90 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e  e of a constrain
33ea0 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20  t failure on an 
33eb0 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65  insert or update
33ec0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70  ..*/.case OP_VUp
33ed0 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  date: {.  sqlite
33ee0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
33ef0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
33f00 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
33f10 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
33f20 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
33f30 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
33f40 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
33f50 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pX;..  assert( 
33f60 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20  pOp->p2==1      
33f70 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
33f80 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e  _Fail   || pOp->
33f90 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  p5==OE_Rollback 
33fa0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
33fb0 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20  p5==OE_Abort || 
33fc0 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
33fd0 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  re || pOp->p5==O
33fe0 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20  E_Replace.  );. 
33ff0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
34000 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74  Only==0 );.  pVt
34010 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
34020 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
34030 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
34040 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
34050 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
34060 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
34070 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
34080 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
34090 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41  b->pModule;.  nA
340a0 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  rg = pOp->p2;.  
340b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
340c0 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a  ype==P4_VTAB );.
340d0 20 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f    if( ALWAYS(pMo
340e0 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29  dule->xUpdate) )
340f0 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43  {.    u8 vtabOnC
34100 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74  onflict = db->vt
34110 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20  abOnConflict;.  
34120 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41    apArg = p->apA
34130 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d  rg;.    pX = &aM
34140 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
34150 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67   for(i=0; i<nArg
34160 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73  ; i++){.      as
34170 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
34180 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  (pX) );.      me
34190 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
341a0 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41  , pX);.      apA
341b0 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20  rg[i] = pX;.    
341c0 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20    pX++;.    }.  
341d0 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
341e0 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  lict = pOp->p5;.
341f0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
34200 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c  ->xUpdate(pVtab,
34210 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72   nArg, apArg, &r
34220 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76  owid);.    db->v
34230 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
34240 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
34250 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
34260 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
34270 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
34280 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
34290 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20  pOp->p1 ){.     
342a0 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20   assert( nArg>1 
342b0 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28  && apArg[0] && (
342c0 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26  apArg[0]->flags&
342d0 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20  MEM_Null) );.   
342e0 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64     db->lastRowid
342f0 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72   = lastRowid = r
34300 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20  owid;.    }.    
34310 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
34320 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
34330 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61   && pOp->p4.pVta
34340 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29  b->bConstraint )
34350 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
34360 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p5==OE_Ignore )
34370 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
34380 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
34390 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
343a0 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
343b0 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65  ((pOp->p5==OE_Re
343c0 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72  place) ? OE_Abor
343d0 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  t : pOp->p5);.  
343e0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
343f0 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67  .      p->nChang
34400 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  e++;.    }.  }. 
34410 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34420 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
34430 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
34440 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
34450 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
34460 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
34470 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
34480 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
34490 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
344a0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
344b0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
344c0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
344d0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
344e0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
344f0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
34500 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
34510 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
34520 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
34530 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
34540 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
34550 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
34560 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
34570 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
34580 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
34590 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
345a0 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
345b0 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
345c0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
345d0 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
345e0 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
345f0 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
34600 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
34610 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
34620 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
34630 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
34640 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
34650 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
34660 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
34670 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
34680 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
34690 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
346a0 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
346b0 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
346c0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
346d0 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
346e0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
346f0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
34700 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a  ewMax;.  Btree *
34710 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  pBt;..  pOut = o
34720 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
34730 20 70 4f 70 29 3b 0a 20 20 70 42 74 20 3d 20 64   pOp);.  pBt = d
34740 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
34750 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20  pBt;.  newMax = 
34760 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  0;.  if( pOp->p3
34770 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d   ){.    newMax =
34780 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
34790 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20  tPage(pBt);.    
347a0 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e  if( newMax < (un
347b0 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29  signed)pOp->p3 )
347c0 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67   newMax = (unsig
347d0 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  ned)pOp->p3;.  }
347e0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
347f0 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61  qlite3BtreeMaxPa
34800 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77  geCount(pBt, new
34810 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Max);.  break;.}
34820 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63  .#endif.../* Opc
34830 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a  ode: Init * P2 *
34840 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
34850 73 3a 20 20 53 74 61 72 74 20 61 74 20 50 32 0a  s:  Start at P2.
34860 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63  **.** Programs c
34870 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
34880 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
34890 20 6f 70 63 6f 64 65 20 61 73 20 74 68 65 20 76   opcode as the v
348a0 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63  ery first.** opc
348b0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  ode..**.** If tr
348c0 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
348d0 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
348e0 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
348f0 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
34900 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
34910 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
34920 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
34930 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
34940 2a 2a 20 4f 72 20 69 66 20 50 34 20 69 73 20 62  ** Or if P4 is b
34950 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74  lank, use the st
34960 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
34970 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a   sqlite3_sql()..
34980 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
34990 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  ot zero, jump to
349a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
349b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74  .*/.case OP_Init
349c0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
349d0 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a  jump */.  char *
349e0 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a  zTrace;.  char *
349f0 7a 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  z;..#ifndef SQLI
34a00 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
34a10 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20  if( db->xTrace. 
34a20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65    && !p->doingRe
34a30 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63  run.   && (zTrac
34a40 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
34a50 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
34a60 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
34a70 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64     z = sqlite3Vd
34a80 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
34a90 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e  Trace);.    db->
34aa0 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
34ab0 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71  eArg, z);.    sq
34ac0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
34ad0 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53  z);.  }.#ifdef S
34ae0 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f  QLITE_USE_FCNTL_
34af0 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d  TRACE.  zTrace =
34b00 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
34b10 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
34b20 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
34b30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
34b40 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
34b50 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
34b60 20 20 20 69 66 28 20 44 62 4d 61 73 6b 54 65 73     if( DbMaskTes
34b70 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
34b80 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  i)==0 ) continue
34b90 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
34ba0 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
34bb0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
34bc0 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
34bd0 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a  TRACE, zTrace);.
34be0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
34bf0 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46   /* SQLITE_USE_F
34c00 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69  CNTL_TRACE */.#i
34c10 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
34c20 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61  G.  if( (db->fla
34c30 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
34c40 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28  race)!=0.   && (
34c50 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
34c60 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
34c70 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
34c80 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
34c90 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
34ca0 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54  trace: %s\n", zT
34cb0 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  race);.  }.#endi
34cc0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
34cd0 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  G */.#endif /* S
34ce0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
34cf0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
34d00 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
34d10 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
34d20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
34d30 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
34d40 54 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 75  TS./* Opcode: Cu
34d50 72 73 6f 72 48 69 6e 74 20 50 31 20 50 32 20 2a  rsorHint P1 P2 *
34d60 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 72 6f 76   P4 *.**.** Prov
34d70 69 64 65 20 61 20 68 69 6e 74 20 74 6f 20 63 75  ide a hint to cu
34d80 72 73 6f 72 20 50 31 20 74 68 61 74 20 69 74 20  rsor P1 that it 
34d90 6f 6e 6c 79 20 6e 65 65 64 73 20 74 6f 20 72 65  only needs to re
34da0 74 75 72 6e 20 72 6f 77 73 20 74 68 61 74 0a 2a  turn rows that.*
34db0 2a 20 73 61 74 69 73 66 79 20 74 68 65 20 45 78  * satisfy the Ex
34dc0 70 72 20 74 72 65 65 20 67 69 76 65 6e 20 69 6e  pr tree given in
34dd0 20 50 34 2e 20 20 50 32 20 69 73 20 74 68 65 20   P4.  P2 is the 
34de0 74 61 62 6c 65 20 6e 75 6d 62 65 72 20 6f 66 20  table number of 
34df0 63 75 72 73 6f 72 20 50 31 0a 2a 2a 20 73 75 63  cursor P1.** suc
34e00 68 20 74 68 61 74 20 72 65 66 65 72 65 6e 63 65  h that reference
34e10 73 20 74 6f 20 63 75 72 73 6f 72 20 50 31 20 69  s to cursor P1 i
34e20 6e 20 74 68 65 20 45 78 70 72 20 74 72 65 65 20  n the Expr tree 
34e30 61 72 65 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20  are given by.** 
34e40 45 78 70 72 2e 69 54 61 62 6c 65 3d 3d 50 32 2e  Expr.iTable==P2.
34e50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 75 72 73  .*/.case OP_Curs
34e60 6f 72 48 69 6e 74 3a 20 7b 0a 20 20 56 64 62 65  orHint: {.  Vdbe
34e70 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
34e80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
34e90 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
34ea0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
34eb0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
34ec0 3d 3d 50 34 5f 45 58 50 52 20 29 3b 0a 20 20 70  ==P4_EXPR );.  p
34ed0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
34ee0 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 20  ->p1];.  if( pC 
34ef0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  ){.    sqlite3Bt
34f00 72 65 65 43 75 72 73 6f 72 48 69 6e 74 28 70 43  reeCursorHint(pC
34f10 2d 3e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e  ->pCursor, pOp->
34f20 70 32 2c 20 70 4f 70 2d 3e 70 34 2e 70 45 78 70  p2, pOp->p4.pExp
34f30 72 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  r);.#ifdef SQLIT
34f40 45 5f 54 45 53 54 0a 20 20 20 20 76 6f 69 64 20  E_TEST.    void 
34f50 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
34f60 6f 72 48 69 6e 74 54 65 73 74 28 4d 65 6d 2a 2c  orHintTest(Mem*,
34f70 20 45 78 70 72 2a 29 3b 0a 20 20 20 20 73 71 6c   Expr*);.    sql
34f80 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
34f90 69 6e 74 54 65 73 74 28 70 2d 3e 61 4d 65 6d 2c  intTest(p->aMem,
34fa0 20 70 4f 70 2d 3e 70 34 2e 70 45 78 70 72 29 3b   pOp->p4.pExpr);
34fb0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
34fc0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
34fd0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
34fe0 55 52 53 4f 52 5f 48 49 4e 54 53 20 2a 2f 0a 0a  URSOR_HINTS */..
34ff0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20  /* Opcode: Noop 
35000 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
35010 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69  Do nothing.  Thi
35020 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
35030 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61 73   often useful as
35040 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69   a jump.** desti
35050 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a  nation..*/./*.**
35060 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c 61   The magic Expla
35070 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e  in opcode are on
35080 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65 6e  ly inserted when
35090 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69   explain==2 (whi
350a0 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79 20  ch.** is to say 
350b0 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  when the EXPLAIN
350c0 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e 74   QUERY PLAN synt
350d0 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20  ax is used.).** 
350e0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63 6f  This opcode reco
350f0 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  rds information 
35100 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a  from the optimiz
35110 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a 2a  er.  It is the.*
35120 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61 20  * the same as a 
35130 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70 63  no-op.  This opc
35140 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61 72  odesnever appear
35150 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20 70  s in a real VM p
35160 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75  rogram..*/.defau
35170 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f  lt: {          /
35180 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c 79  * This is really
35190 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f   OP_Noop and OP_
351a0 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73  Explain */.  ass
351b0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
351c0 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70  ==OP_Noop || pOp
351d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ->opcode==OP_Exp
351e0 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b  lain );.  break;
351f0 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .}../***********
35200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35240 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73 20  **.** The cases 
35250 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73 74  of the switch st
35260 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74 68  atement above th
35270 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61  is line should a
35280 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a  ll be indented.*
35290 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20  * by 6 spaces.  
352a0 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  But the left-mos
352b0 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65 20  t 6 spaces have 
352c0 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20  been removed to 
352d0 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72  improve the.** r
352e0 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72 6f  eadability.  Fro
352f0 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20  m this point on 
35300 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c  down, the normal
35310 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c   indentation rul
35320 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72  es are.** restor
35330 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ed..************
35340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35380 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65 66  */.    }..#ifdef
35390 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
353a0 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65 6e    {.      u64 en
353b0 64 54 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 48  dTime = sqlite3H
353c0 77 74 69 6d 65 28 29 3b 0a 20 20 20 20 20 20 69  wtime();.      i
353d0 66 28 20 65 6e 64 54 69 6d 65 3e 73 74 61 72 74  f( endTime>start
353e0 20 29 20 70 4f 72 69 67 4f 70 2d 3e 63 79 63 6c   ) pOrigOp->cycl
353f0 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20  es += endTime - 
35400 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 72  start;.      pOr
35410 69 67 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20  igOp->cnt++;.   
35420 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
35430 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
35440 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e  code adds nothin
35450 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  g to the actual 
35460 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20  functionality.  
35470 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67    ** of the prog
35480 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ram.  It is only
35490 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e   here for testin
354a0 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
354b0 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f  .    ** On the o
354c0 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f  ther hand, it do
354d0 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c  es burn CPU cycl
354e0 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68  es every time th
354f0 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65  rough.    ** the
35500 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e   evaluator loop.
35510 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76    So we can leav
35520 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44  e it out when ND
35530 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
35540 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  .    */.#ifndef 
35550 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  NDEBUG.    asser
35560 74 28 20 70 4f 70 3e 3d 26 61 4f 70 5b 2d 31 5d  t( pOp>=&aOp[-1]
35570 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e   && pOp<&aOp[p->
35580 6e 4f 70 2d 31 5d 20 29 3b 0a 0a 23 69 66 64 65  nOp-1] );..#ifde
35590 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
355a0 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
355b0 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
355c0 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
355d0 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28   rc!=0 ) printf(
355e0 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20  "rc=%d\n",rc);. 
355f0 20 20 20 20 20 69 66 28 20 70 4f 72 69 67 4f 70       if( pOrigOp
35600 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50 46  ->opflags & (OPF
35610 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
35620 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
35630 65 28 70 4f 72 69 67 4f 70 2d 3e 70 32 2c 20 26  e(pOrigOp->p2, &
35640 61 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 32  aMem[pOrigOp->p2
35650 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
35660 20 20 69 66 28 20 70 4f 72 69 67 4f 70 2d 3e 6f    if( pOrigOp->o
35670 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
35680 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72  UT3 ){.        r
35690 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 72  egisterTrace(pOr
356a0 69 67 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  igOp->p3, &aMem[
356b0 70 4f 72 69 67 4f 70 2d 3e 70 33 5d 29 3b 0a 20  pOrigOp->p3]);. 
356c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
356d0 64 69 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44  dif  /* SQLITE_D
356e0 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20  EBUG */.#endif  
356f0 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d  /* NDEBUG */.  }
35700 20 20 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20    /* The end of 
35710 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70  the for(;;) loop
35720 20 74 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75   the loops throu
35730 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20  gh opcodes */.. 
35740 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68 20   /* If we reach 
35750 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d  this point, it m
35760 65 61 6e 73 20 74 68 61 74 20 65 78 65 63 75 74  eans that execut
35770 69 6f 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20  ion is finished 
35780 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72  with.  ** an err
35790 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e  or of some kind.
357a0 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72  .  */.vdbe_error
357b0 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28  _halt:.  assert(
357c0 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d   rc );.  p->rc =
357d0 20 72 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28   rc;.  testcase(
357e0 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
357f0 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a  nfig.xLog!=0 );.
35800 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63    sqlite3_log(rc
35810 2c 20 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  , "statement abo
35820 72 74 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20  rts at %d: [%s] 
35830 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  %s", .          
35840 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 28 70           (int)(p
35850 4f 70 20 2d 20 61 4f 70 29 2c 20 70 2d 3e 7a 53  Op - aOp), p->zS
35860 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
35870 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
35880 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
35890 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
358a0 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
358b0 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
358c0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
358d0 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
358e0 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20  maOnFault>0 ){. 
358f0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
35900 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73  neSchema(db, res
35910 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d  etSchemaOnFault-
35920 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68  1);.  }..  /* Th
35930 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
35940 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70  ay out of this p
35950 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61  rocedure.  We ha
35960 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61  ve to.  ** relea
35970 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f  se the mutexes o
35980 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65  n btrees that we
35990 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74  re acquired at t
359a0 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a  he.  ** top. */.
359b0 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64  vdbe_return:.  d
359c0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
359d0 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74  astRowid;.  test
359e0 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20  case( nVmStep>0 
359f0 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  );.  p->aCounter
35a00 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
35a10 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28  US_VM_STEP] += (
35a20 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73  int)nVmStep;.  s
35a30 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28  qlite3VdbeLeave(
35a40 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
35a50 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
35a60 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
35a70 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
35a80 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
35a90 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
35aa0 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
35ab0 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
35ac0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
35ad0 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
35ae0 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d  oo big");.  rc =
35af0 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a   SQLITE_TOOBIG;.
35b00 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
35b10 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
35b20 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20  mp to here if a 
35b30 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a  malloc() fails..
35b40 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64    */.no_mem:.  d
35b50 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
35b60 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  = 1;.  sqlite3Vd
35b70 62 65 45 72 72 6f 72 28 70 2c 20 22 6f 75 74 20  beError(p, "out 
35b80 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 72  of memory");.  r
35b90 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
35ba0 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
35bb0 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
35bc0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f 72  Jump to here for
35bd0 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64 20   any other kind 
35be0 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e 20  of fatal error. 
35bf0 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61 62   The "rc" variab
35c00 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20 68  le.  ** should h
35c10 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e 75  old the error nu
35c20 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74  mber..  */.abort
35c30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20  _due_to_error:. 
35c40 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72 72   assert( p->zErr
35c50 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  Msg==0 );.  if( 
35c60 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
35c70 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e   ) rc = SQLITE_N
35c80 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21 3d  OMEM;.  if( rc!=
35c90 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
35ca0 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EM ){.    sqlite
35cb0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
35cc0 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74  s", sqlite3ErrSt
35cd0 72 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f  r(rc));.  }.  go
35ce0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
35cf0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
35d00 6f 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71  o here if the sq
35d10 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
35d20 29 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69  ) API sets the i
35d30 6e 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c  nterrupt.  ** fl
35d40 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64  ag..  */.abort_d
35d50 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a  ue_to_interrupt:
35d60 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75  .  assert( db->u
35d70 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
35d80 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
35d90 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d  _INTERRUPT;.  p-
35da0 3e 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69  >rc = rc;.  sqli
35db0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
35dc0 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45 72 72  "%s", sqlite3Err
35dd0 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f  Str(rc));.  goto
35de0 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
35df0 3b 0a 7d 0a                                      ;.}.