/ Hex Artifact Content
Login

Artifact 54fa84fdd992886dcb1a4c0cec2ae686d2d18b2b:


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 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d  OOK(DB)   ((DB)-
0d20: 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
0d30: 61 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61  ack||(DB)->xUpda
0d40: 74 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73  teCallback).#els
0d50: 65 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55  e.# define HAS_U
0d60: 50 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20  PDATE_HOOK(DB)  
0d70: 28 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61  ((DB)->xUpdateCa
0d80: 6c 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a  llback).#endif..
0d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67  /*.** The next g
0da0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69  lobal variable i
0db0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61  s incremented ea
0dc0: 63 68 20 74 69 6d 65 20 74 68 65 20 4f 50 5f 46  ch time the OP_F
0dd0: 6f 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  ound opcode.** i
0de0: 73 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73  s executed. This
0df0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
0e00: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
0e10: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  the foreign key.
0e20: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70  ** operation imp
0e30: 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f  lemented using O
0e40: 50 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f  P_FkIsZero is wo
0e50: 72 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69  rking. This vari
0e60: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
0e70: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
0e80: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
0e90: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ea0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
0eb0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0ec0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0ed0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75  .int sqlite3_fou
0ee0: 6e 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65  nd_count = 0;.#e
0ef0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  ndif../*.** Test
0f00: 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73   a register to s
0f10: 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73  ee if it exceeds
0f20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78   the current max
0f30: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
0f40: 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72  ** If it does, r
0f50: 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61  ecord the new ma
0f60: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0f70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0f80: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
0f90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fa0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
0fb0: 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41  T).# define UPDA
0fc0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
0fd0: 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  P)  updateMaxBlo
0fe0: 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23  bsize(P).#else.#
0ff0: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1000: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23  AX_BLOBSIZE(P).#
1010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76  endif../*.** Inv
1020: 6f 6b 65 20 74 68 65 20 56 44 42 45 20 63 6f 76  oke the VDBE cov
1030: 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20  erage callback, 
1040: 69 66 20 74 68 61 74 20 63 61 6c 6c 62 61 63 6b  if that callback
1050: 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
1060: 69 73 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  is.** feature is
1070: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 20 73   used for test s
1080: 75 69 74 65 20 76 61 6c 69 64 61 74 69 6f 6e 20  uite validation 
1090: 6f 6e 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f  only and does no
10a0: 74 20 61 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70  t appear an.** p
10b0: 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 73  roduction builds
10c0: 2e 0a 2a 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20  ..**.** M is an 
10d0: 69 6e 74 65 67 65 72 2c 20 32 20 6f 72 20 33 2c  integer, 2 or 3,
10e0: 20 74 68 61 74 20 69 6e 64 69 63 65 73 20 68 6f   that indices ho
10f0: 77 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  w many different
1100: 20 77 61 79 73 20 74 68 65 0a 2a 2a 20 62 72 61   ways the.** bra
1110: 6e 63 68 20 63 61 6e 20 67 6f 2e 20 20 49 74 20  nch can go.  It 
1120: 69 73 20 75 73 75 61 6c 6c 79 20 32 2e 20 20 22  is usually 2.  "
1130: 49 22 20 69 73 20 74 68 65 20 64 69 72 65 63 74  I" is the direct
1140: 69 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 2a  ion the branch.*
1150: 2a 20 67 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73  * goes.  0 means
1160: 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20   falls through. 
1170: 20 31 20 6d 65 61 6e 73 20 62 72 61 6e 63 68 20   1 means branch 
1180: 69 73 20 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61  is taken.  2 mea
1190: 6e 73 20 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64  ns the.** second
11a0: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 62 72 61   alternative bra
11b0: 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a  nch is taken..**
11c0: 0a 2a 2a 20 69 53 72 63 4c 69 6e 65 20 69 73 20  .** iSrcLine is 
11d0: 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  the source code 
11e0: 6c 69 6e 65 20 28 66 72 6f 6d 20 74 68 65 20 5f  line (from the _
11f0: 5f 4c 49 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74  _LINE__ macro) t
1200: 68 61 74 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  hat.** generated
1210: 20 74 68 65 20 56 44 42 45 20 69 6e 73 74 72 75   the VDBE instru
1220: 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73  ction.  This ins
1230: 74 72 75 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73  trumentation ass
1240: 75 6d 65 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a  umes that all.**
1250: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 69 73 20   source code is 
1260: 69 6e 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  in a single file
1270: 20 28 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69   (the amalgamati
1280: 6f 6e 29 2e 20 20 53 70 65 63 69 61 6c 20 76 61  on).  Special va
1290: 6c 75 65 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20  lues 1.** and 2 
12a0: 66 6f 72 20 74 68 65 20 69 53 72 63 4c 69 6e 65  for the iSrcLine
12b0: 20 70 61 72 61 6d 65 74 65 72 20 6d 65 61 6e 20   parameter mean 
12c0: 74 68 61 74 20 74 68 69 73 20 70 61 72 74 69 63  that this partic
12d0: 75 6c 61 72 20 62 72 61 6e 63 68 20 69 73 0a 2a  ular branch is.*
12e0: 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f  * always taken o
12f0: 72 20 6e 65 76 65 72 20 74 61 6b 65 6e 2c 20 72  r never taken, r
1300: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
1310: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1320: 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
1330: 45 29 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65  E).# define Vdbe
1340: 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29  BranchTaken(I,M)
1350: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1360: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1370: 49 2c 4d 29 20 76 64 62 65 54 61 6b 65 42 72 61  I,M) vdbeTakeBra
1380: 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e  nch(pOp->iSrcLin
1390: 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74 69 63 20  e,I,M).  static 
13a0: 76 6f 69 64 20 76 64 62 65 54 61 6b 65 42 72 61  void vdbeTakeBra
13b0: 6e 63 68 28 69 6e 74 20 69 53 72 63 4c 69 6e 65  nch(int iSrcLine
13c0: 2c 20 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20  , u8 I, u8 M){. 
13d0: 20 20 20 69 66 28 20 69 53 72 63 4c 69 6e 65 3c     if( iSrcLine<
13e0: 3d 32 20 26 26 20 41 4c 57 41 59 53 28 69 53 72  =2 && ALWAYS(iSr
13f0: 63 4c 69 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20  cLine>0) ){.    
1400: 20 20 4d 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a    M = iSrcLine;.
1410: 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
1420: 74 68 65 20 74 72 75 74 68 20 6f 66 20 56 64 62  the truth of Vdb
1430: 65 43 6f 76 65 72 61 67 65 41 6c 77 61 79 73 54  eCoverageAlwaysT
1440: 61 6b 65 6e 28 29 20 61 6e 64 20 0a 20 20 20 20  aken() and .    
1450: 20 20 2a 2a 20 56 64 62 65 43 6f 76 65 72 61 67    ** VdbeCoverag
1460: 65 4e 65 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f  eNeverTaken() */
1470: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
1480: 4d 20 26 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20  M & I)==I );.   
1490: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
14a0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
14b0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
14c0: 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 20 20  h==0 ) return;  
14d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
14e0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
14f0: 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e 63  onfig.xVdbeBranc
1500: 68 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  h(sqlite3GlobalC
1510: 6f 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e 63  onfig.pVdbeBranc
1520: 68 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  hArg,.          
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 20 20 20 69 53 72 63              iSrc
1550: 4c 69 6e 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d  Line,I,M);.    }
1560: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  .  }.#endif../*.
1570: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20 67  ** Convert the g
1580: 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69 6e  iven register in
1590: 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20 69  to a string if i
15a0: 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61  t isn't one.** a
15b0: 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20 6e  lready. Return n
15c0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c  on-zero if a mal
15d0: 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a  loc() fails..*/.
15e0: 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69 66  #define Stringif
15f0: 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69  y(P, enc) \.   i
1600: 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d  f(((P)->flags&(M
1610: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
1620: 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 56  )==0 && sqlite3V
1630: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
1640: 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20 7b  P,enc)) \.     {
1650: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a   goto no_mem; }.
1660: 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65  ./*.** An epheme
1670: 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ral string value
1680: 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74   (signified by t
1690: 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61  he MEM_Ephem fla
16a0: 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61  g) contains.** a
16b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79   pointer to a dy
16c0: 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61  namically alloca
16d0: 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65  ted string where
16e0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69   some other enti
16f0: 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73  ty.** is respons
1700: 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63  ible for dealloc
1710: 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e  ating that strin
1720: 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  g.  Because the 
1730: 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73  register.** does
1740: 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65   not control the
1750: 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68   string, it migh
1760: 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74  t be deleted wit
1770: 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65  hout the registe
1780: 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e  r.** knowing it.
1790: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
17a0: 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20  ine converts an 
17b0: 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
17c0: 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61   into a dynamica
17d0: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  lly allocated.**
17e0: 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65   string that the
17f0: 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66   register itself
1800: 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f   controls.  In o
1810: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a  ther words, it.*
1820: 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45  * converts an ME
1830: 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69  M_Ephem string i
1840: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74  nto a string wit
1850: 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63  h P.z==P.zMalloc
1860: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65  ..*/.#define Dee
1870: 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c  phemeralize(P) \
1880: 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c  .   if( ((P)->fl
1890: 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d  ags&MEM_Ephem)!=
18a0: 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71  0 \.       && sq
18b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65  lite3VdbeMemMake
18c0: 57 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20  Writeable(P) ){ 
18d0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f  goto no_mem;}../
18e0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
18f0: 20 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20   the cursor was 
1900: 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
1910: 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f   OP_OpenSorter o
1920: 70 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e  pcode. */.#defin
1930: 65 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28  e isSorter(x) ((
1940: 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d 30 29 0a  x)->pSorter!=0).
1950: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  ./*.** Allocate 
1960: 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62 65  VdbeCursor numbe
1970: 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e 20  r iCur.  Return 
1980: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e  a pointer to it.
1990: 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a    Return NULL.**
19a0: 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20 6f   if we run out o
19b0: 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61  f memory..*/.sta
19c0: 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20 2a  tic VdbeCursor *
19d0: 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 0a  allocateCursor(.
19e0: 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20 20    Vdbe *p,      
19f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76          /* The v
1a00: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a  irtual machine *
1a10: 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20 20  /.  int iCur,   
1a20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1a30: 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56 64  ex of the new Vd
1a40: 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e  beCursor */.  in
1a50: 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20 20  t nField,       
1a60: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a70: 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 74   fields in the t
1a80: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f  able or index */
1a90: 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20 20  .  int iDb,     
1aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
1ab0: 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72 20  base the cursor 
1ac0: 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d  belongs to, or -
1ad0: 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74 72  1 */.  int isBtr
1ae0: 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a 20  eeCursor     /* 
1af0: 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65 2e  True for B-Tree.
1b00: 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65 75    False for pseu
1b10: 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61 62  do-table or vtab
1b20: 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64   */.){.  /* Find
1b30: 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
1b40: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73   that will be us
1b50: 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1b60: 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20  blob of memory. 
1b70: 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72   ** required for
1b80: 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72   this VdbeCursor
1b90: 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69   structure. It i
1ba0: 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20  s convenient to 
1bb0: 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65  use a .  ** vdbe
1bc0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20   memory cell to 
1bd0: 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72  manage the memor
1be0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
1bf0: 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a  uired for a.  **
1c00: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1c10: 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f  cture for the fo
1c20: 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a  llowing reasons:
1c30: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53  .  **.  **   * S
1c40: 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20  ometimes cursor 
1c50: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
1c60: 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66   for a couple of
1c70: 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1c80: 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20      purposes in 
1c90: 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20  a vdbe program. 
1ca0: 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73  The different us
1cb0: 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65  es might require
1cc0: 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72  .  **     differ
1cd0: 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61  ent sized alloca
1ce0: 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65  tions. Memory ce
1cf0: 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77  lls provide grow
1d00: 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c  able.  **     al
1d10: 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  locations..  **.
1d20: 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73    **   * When us
1d30: 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ing ENABLE_MEMOR
1d40: 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65  Y_MANAGEMENT, me
1d50: 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72  mory cell buffer
1d60: 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62  s can.  **     b
1d70: 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76  e freed lazily v
1d80: 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72  ia the sqlite3_r
1d90: 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20  elease_memory() 
1da0: 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20  API. This.  **  
1db0: 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65     minimizes the
1dc0: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f   number of mallo
1dd0: 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20  c calls made by 
1de0: 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a  the system..  **
1df0: 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c  .  ** Memory cel
1e00: 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61  ls for cursors a
1e10: 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20  re allocated at 
1e20: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61  the top of the a
1e30: 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63  ddress.  ** spac
1e40: 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  e. Memory cell (
1e50: 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70  p->nMem) corresp
1e60: 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30  onds to cursor 0
1e70: 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a  . Space for.  **
1e80: 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e   cursor 1 is man
1e90: 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63  aged by memory c
1ea0: 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c  ell (p->nMem-1),
1eb0: 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d   etc..  */.  Mem
1ec0: 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65   *pMem = &p->aMe
1ed0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b  m[p->nMem-iCur];
1ee0: 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20  ..  int nByte;. 
1ef0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1f00: 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20   = 0;.  nByte = 
1f10: 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69  .      ROUND8(si
1f20: 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29  zeof(VdbeCursor)
1f30: 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32  ) + 2*sizeof(u32
1f40: 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20  )*nField + .    
1f50: 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f 72    (isBtreeCursor
1f60: 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  ?sqlite3BtreeCur
1f70: 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a 20  sorSize():0);.. 
1f80: 20 61 73 73 65 72 74 28 20 69 43 75 72 3c 70 2d   assert( iCur<p-
1f90: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
1fa0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
1fb0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
1fc0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1fd0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
1fe0: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
1ff0: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2000: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2010: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
2020: 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20 30  w(pMem, nByte, 0
2030: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2040: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2050: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2060: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
2070: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
2080: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
2090: 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62    pCx->iDb = iDb
20a0: 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c  ;.    pCx->nFiel
20b0: 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20  d = nField;.    
20c0: 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73 6f  if( isBtreeCurso
20d0: 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  r ){.      pCx->
20e0: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
20f0: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2100: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
2110: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2120: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
2130: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
2140: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
2150: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43 75  sorZero(pCx->pCu
2160: 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
2170: 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d  .  return pCx;.}
2180: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
2190: 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20 69  onvert a value i
21a0: 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65  nto a numeric re
21b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20  presentation if 
21c0: 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20  we can.** do so 
21d0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
21e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e  information.  In
21f0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
2200: 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c   the string.** l
2210: 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62  ooks like a numb
2220: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 69  er, convert it i
2230: 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20 49  nto a number.  I
2240: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f it does not.**
2250: 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d   look like a num
2260: 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61 6c  ber, leave it al
2270: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  one..*/.static v
2280: 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  oid applyNumeric
2290: 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70 52  Affinity(Mem *pR
22a0: 65 63 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72 56  ec){.  double rV
22b0: 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61 6c  alue;.  i64 iVal
22c0: 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20 70  ue;.  u8 enc = p
22d0: 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 69 66 28 20  Rec->enc;.  if( 
22e0: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
22f0: 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75 72  _Str)==0 ) retur
2300: 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  n;.  if( sqlite3
2310: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2320: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2330: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2340: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2350: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2360: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2370: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2380: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2390: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
23a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
23b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
23c0: 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20  c->r = rValue;. 
23d0: 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
23e0: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 7d 0a  = MEM_Real;.  }.
23f0: 7d 0a 23 64 65 66 69 6e 65 20 41 70 70 6c 79 4e  }.#define ApplyN
2400: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
2410: 29 20 20 5c 0a 20 20 20 69 66 28 28 28 58 29 2d  )  \.   if(((X)-
2420: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c  >flags&(MEM_Real
2430: 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 29 7b 61  |MEM_Int))==0){a
2440: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2450: 69 74 79 28 58 29 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  ity(X);}../*.** 
2460: 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65  Processing is de
2470: 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61  termine by the a
2480: 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65  ffinity paramete
2490: 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  r:.**.** SQLITE_
24a0: 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20  AFF_INTEGER:.** 
24b0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a  SQLITE_AFF_REAL:
24c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
24d0: 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72  UMERIC:.**    Tr
24e0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65  y to convert pRe
24f0: 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  c to an integer 
2500: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2510: 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74  r a .**    float
2520: 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73  ing-point repres
2530: 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69  entation if an i
2540: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2550: 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e  ation.**    is n
2560: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f  ot possible.  No
2570: 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  te that the inte
2580: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2590: 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61  on is.**    alwa
25a0: 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76  ys preferred, ev
25b0: 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69  en if the affini
25c0: 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61  ty is REAL, beca
25d0: 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74  use.**    an int
25e0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
25f0: 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63  ion is more spac
2600: 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64  e efficient on d
2610: 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  isk..**.** SQLIT
2620: 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20  E_AFF_TEXT:.**  
2630: 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74    Convert pRec t
2640: 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  o a text represe
2650: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ntation..**.** S
2660: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a  QLITE_AFF_NONE:.
2670: 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52  **    No-op.  pR
2680: 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  ec is unchanged.
2690: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
26a0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  applyAffinity(. 
26b0: 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20   Mem *pRec,     
26c0: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75       /* The valu
26d0: 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  e to apply affin
26e0: 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72  ity to */.  char
26f0: 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20   affinity,      
2700: 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
2710: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
2720: 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20  .  u8 enc       
2730: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
2740: 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  is text encoding
2750: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66   */.){.  if( aff
2760: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
2770: 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a  F_TEXT ){.    /*
2780: 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68   Only attempt th
2790: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20  e conversion to 
27a0: 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73  TEXT if there is
27b0: 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72   an integer or r
27c0: 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  eal.    ** repre
27d0: 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20  sentation (blob 
27e0: 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20  and NULL do not 
27f0: 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62  get converted) b
2800: 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20  ut no string.   
2810: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
2820: 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  on..    */.    i
2830: 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61  f( 0==(pRec->fla
2840: 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28  gs&MEM_Str) && (
2850: 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d  pRec->flags&(MEM
2860: 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20  _Real|MEM_Int)) 
2870: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2880: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
2890: 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20  (pRec, enc);.   
28a0: 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61   }.    pRec->fla
28b0: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c  gs &= ~(MEM_Real
28c0: 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c  |MEM_Int);.  }el
28d0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 21  se if( affinity!
28e0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45  =SQLITE_AFF_NONE
28f0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2900: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2910: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20  _AFF_INTEGER || 
2920: 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
2930: 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20  _AFF_REAL.      
2940: 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69         || affini
2950: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ty==SQLITE_AFF_N
2960: 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 41 70  UMERIC );.    Ap
2970: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2980: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66  ty(pRec);.    if
2990: 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
29a0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
29b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
29c0: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65  egerAffinity(pRe
29d0: 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  c);.    }.  }.}.
29e0: 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f  ./*.** Try to co
29f0: 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f  nvert the type o
2a00: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  f a function arg
2a10: 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c  ument or a resul
2a20: 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f  t column.** into
2a30: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2a40: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20  sentation.  Use 
2a50: 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f  either INTEGER o
2a60: 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72  r REAL whichever
2a70: 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61  .** is appropria
2a80: 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f  te.  But only do
2a90: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2aa0: 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  if it is possibl
2ab0: 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73  e without.** los
2ac0: 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
2ad0: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20   and return the 
2ae0: 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20  revised type of 
2af0: 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  the argument..*/
2b00: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  .int sqlite3_val
2b10: 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28  ue_numeric_type(
2b20: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
2b30: 56 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70  Val){.  int eTyp
2b40: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
2b50: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
2b60: 69 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54  if( eType==SQLIT
2b70: 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65  E_TEXT ){.    Me
2b80: 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29  m *pMem = (Mem*)
2b90: 70 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e  pVal;.    applyN
2ba0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
2bb0: 4d 65 6d 29 3b 0a 20 20 20 20 65 54 79 70 65 20  Mem);.    eType 
2bc0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
2bd0: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a  type(pVal);.  }.
2be0: 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a    return eType;.
2bf0: 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65  }../*.** Exporte
2c00: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70  d version of app
2c10: 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68  lyAffinity(). Th
2c20: 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20  is one works on 
2c30: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2c40: 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65  .** not the inte
2c50: 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a  rnal Mem* type..
2c60: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
2c70: 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
2c80: 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  y(.  sqlite3_val
2c90: 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20  ue *pVal, .  u8 
2ca0: 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20  affinity, .  u8 
2cb0: 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66  enc.){.  applyAf
2cc0: 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56  finity((Mem *)pV
2cd0: 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e  al, affinity, en
2ce0: 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  c);.}../*.** Ret
2cf0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
2d00: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
2d10: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
2d20: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
2d30: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
2d40: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
2d50: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2d60: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
2d70: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
2d80: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
2d90: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
2da0: 74 20 70 4d 65 6d 2d 3e 72 20 61 6e 64 20 70 4d  t pMem->r and pM
2db0: 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69  em->u.i appropri
2dc0: 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ately..*/.static
2dd0: 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65   u16 numericType
2de0: 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69  (Mem *pMem){.  i
2df0: 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  f( pMem->flags &
2e00: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
2e10: 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  al) ){.    retur
2e20: 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  n pMem->flags & 
2e30: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
2e40: 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d  l);.  }.  if( pM
2e50: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
2e60: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29  _Str|MEM_Blob) )
2e70: 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
2e80: 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26  3AtoF(pMem->z, &
2e90: 70 4d 65 6d 2d 3e 72 2c 20 70 4d 65 6d 2d 3e 6e  pMem->r, pMem->n
2ea0: 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20  , pMem->enc)==0 
2eb0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ){.      return 
2ec0: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  0;.    }.    if(
2ed0: 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70   sqlite3Atoi64(p
2ee0: 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75  Mem->z, &pMem->u
2ef0: 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65  .i, pMem->n, pMe
2f00: 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f  m->enc)==SQLITE_
2f10: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  OK ){.      retu
2f20: 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20  rn MEM_Int;.    
2f30: 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d  }.    return MEM
2f40: 5f 52 65 61 6c 3b 0a 20 20 7d 0a 20 20 72 65 74  _Real;.  }.  ret
2f50: 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66  urn 0;.}..#ifdef
2f60: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
2f70: 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65  .** Write a nice
2f80: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
2f90: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  tation of the co
2fa0: 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70  ntents of cell p
2fb0: 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66  Mem.** into buff
2fc0: 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20  er zBuf, length 
2fd0: 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  nBuf..*/.void sq
2fe0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
2ff0: 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65  tyPrint(Mem *pMe
3000: 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a  m, char *zBuf){.
3010: 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a    char *zCsr = z
3020: 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70  Buf;.  int f = p
3030: 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73  Mem->flags;..  s
3040: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
3050: 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73   *const encnames
3060: 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38  [] = {"(X)", "(8
3070: 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28  )", "(16LE)", "(
3080: 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20  16BE)"};..  if( 
3090: 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20  f&MEM_Blob ){.  
30a0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61    int i;.    cha
30b0: 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26  r c;.    if( f &
30c0: 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20   MEM_Dyn ){.    
30d0: 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20    c = 'z';.     
30e0: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
30f0: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
3100: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3110: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3120: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
3130: 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20    c = 't';.     
3140: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3150: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3160: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3170: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3180: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20  phem ){.      c 
3190: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
31a0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
31b0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
31c0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
31d0: 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a  .      c = 's';.
31e0: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
31f0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3200: 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b   zCsr, "%c", c);
3210: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
3220: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3230: 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  r);.    sqlite3_
3240: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3250: 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d  sr, "%d[", pMem-
3260: 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d  >n);.    zCsr +=
3270: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3280: 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28  (zCsr);.    for(
3290: 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70  i=0; i<16 && i<p
32a0: 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20  Mem->n; i++){.  
32b0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
32c0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
32d0: 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d  "%02X", ((int)pM
32e0: 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29  em->z[i] & 0xFF)
32f0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
3300: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3310: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
3320: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20    for(i=0; i<16 
3330: 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b  && i<pMem->n; i+
3340: 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a  +){.      char z
3350: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20   = pMem->z[i];. 
3360: 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c       if( z<32 ||
3370: 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b   z>126 ) *zCsr++
3380: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c   = '.';.      el
3390: 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a  se *zCsr++ = z;.
33a0: 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74      }..    sqlit
33b0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
33c0: 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e   zCsr, "]%s", en
33d0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
33e0: 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  ]);.    zCsr += 
33f0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3400: 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66  zCsr);.    if( f
3410: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
3420: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
3430: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3440: 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e  "+%dz",pMem->u.n
3450: 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73  Zero);.      zCs
3460: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3470: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3480: 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c  }.    *zCsr = '\
3490: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
34a0: 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  f & MEM_Str ){. 
34b0: 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20     int j, k;.   
34c0: 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a   zBuf[0] = ' ';.
34d0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
34e0: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  Dyn ){.      zBu
34f0: 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20  f[1] = 'z';.    
3500: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3510: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
3520: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
3530: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3540: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
3550: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27     zBuf[1] = 't'
3560: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3570: 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45  (f & (MEM_Dyn|ME
3580: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
3590: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
35a0: 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20  & MEM_Ephem ){. 
35b0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
35c0: 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  e';.      assert
35d0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
35e0: 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20  ic|MEM_Dyn))==0 
35f0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
3600: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73      zBuf[1] = 's
3610: 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d  ';.    }.    k =
3620: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   2;.    sqlite3_
3630: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a  snprintf(100, &z
3640: 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d  Buf[k], "%d", pM
3650: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d  em->n);.    k +=
3660: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
3670: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
3680: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b  zBuf[k++] = '[';
3690: 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  .    for(j=0; j<
36a0: 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b  15 && j<pMem->n;
36b0: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20   j++){.      u8 
36c0: 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a  c = pMem->z[j];.
36d0: 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32        if( c>=0x2
36e0: 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20  0 && c<0x7f ){. 
36f0: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3700: 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = c;.      }els
3710: 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b  e{.        zBuf[
3720: 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20  k++] = '.';.    
3730: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42    }.    }.    zB
3740: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20  uf[k++] = ']';. 
3750: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3760: 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d  ntf(100,&zBuf[k]
3770: 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d  , encnames[pMem-
3780: 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d  >enc]);.    k +=
3790: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
37a0: 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20  (&zBuf[k]);.    
37b0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20  zBuf[k++] = 0;. 
37c0: 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66   }.}.#endif..#if
37d0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
37e0: 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65  ./*.** Print the
37f0: 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69   value of a regi
3800: 73 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67  ster for tracing
3810: 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74   purposes:.*/.st
3820: 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61  atic void memTra
3830: 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b  cePrint(Mem *p){
3840: 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  .  if( p->flags 
3850: 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20  & MEM_Undefined 
3860: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3870: 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d  undefined");.  }
3880: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3890: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
38a0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c      printf(" NUL
38b0: 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  L");.  }else if(
38c0: 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45   (p->flags & (ME
38d0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d  M_Int|MEM_Str))=
38e0: 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74  =(MEM_Int|MEM_St
38f0: 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  r) ){.    printf
3900: 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  (" si:%lld", p->
3910: 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  u.i);.  }else if
3920: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3930: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  _Int ){.    prin
3940: 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d  tf(" i:%lld", p-
3950: 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53  >u.i);.#ifndef S
3960: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
3970: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73  ING_POINT.  }els
3980: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
3990: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
39a0: 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c   printf(" r:%g",
39b0: 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a 20   p->r);.#endif. 
39c0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
39d0: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
39e0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
39f0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3a00: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3a10: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3a20: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3a30: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3a40: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3a50: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3a60: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3a70: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3a80: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3a90: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3aa0: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3ab0: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3ac0: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3ad0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3ae0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3af0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3b00: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3b10: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3b20: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3b30: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3b40: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3b50: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3b60: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3b70: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3b80: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3b90: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3ba0: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3bb0: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3bc0: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3bd0: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3be0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3bf0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3c00: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3c10: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3c20: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3c30: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3c40: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3c50: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3c60: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3c70: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3c80: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3c90: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3ca0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3cb0: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3cc0: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3cd0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3ce0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3cf0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3d00: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3d10: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3d20: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3d30: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
3d40: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
3d50: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
3d60: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
3d70: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
3d80: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
3d90: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
3da0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
3db0: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
3dc0: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
3dd0: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
3de0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
3df0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
3e00: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
3e10: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
3e20: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
3e30: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
3e40: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
3e50: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
3e60: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
3e70: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
3e80: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
3e90: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
3ea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
3eb0: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
3ec0: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
3ed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
3ee0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
3ef0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
3f00: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
3f10: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
3f20: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f40: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
3f50: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
3f60: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
3f70: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
3f80: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
3f90: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
3fa0: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
3fb0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
3fc0: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
3fd0: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
3fe0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
3ff0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
4000: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
4010: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
4020: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
4030: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4040: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4050: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4060: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4070: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4080: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4090: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
40a0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
40b0: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
40c0: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
40d0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
40e0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
40f0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
4100: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
4110: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
4120: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
4130: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4140: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4150: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4160: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4170: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4180: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
41a0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
41b0: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
41c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
41d0: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
41e0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
41f0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
4200: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
4210: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
4220: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
4230: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4240: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4250: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4260: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4270: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4280: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4290: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
42a0: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
42b0: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
42c0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
42d0: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
42e0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
42f0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
4300: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
4310: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
4320: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
4330: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4340: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4350: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4360: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4370: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4380: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4390: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
43a0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
43b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
43c0: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
43d0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
43e0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
43f0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
4400: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
4410: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
4420: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
4430: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4440: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4450: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4460: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4470: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4480: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4490: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
44a0: 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
44b0: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
44c0: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
44d0: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
44e0: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
44f0: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
4500: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
4510: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
4520: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
4530: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4540: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4550: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4560: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4570: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4580: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4590: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
45a0: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
45b0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
45c0: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
45d0: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
45e0: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
45f0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
4600: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
4610: 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65  Limit = (unsigne
4620: 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  d)p->aCounter[SQ
4630: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4640: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66  VM_STEP];.    if
4650: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4660: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4670: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4680: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4690: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
46a0: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
46b0: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
46c0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
46d0: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
46e0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
46f0: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
4700: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4710: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
4720: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
4730: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4740: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4750: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4760: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4770: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4780: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4790: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
47a0: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
47b0: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
47c0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
47d0: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
47e0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
47f0: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4800: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4810: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4820: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4830: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4840: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4850: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4860: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4870: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4880: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4890: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
48a0: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
48b0: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
48c0: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
48d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
48e0: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
48f0: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
4900: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
4910: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
4920: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
4930: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
4940: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4950: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4960: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4970: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4980: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
4990: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
49a0: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
49b0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
49c0: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
49d0: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
49e0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
49f0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4a00: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4a10: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4a20: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4a30: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4a40: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
4a50: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4a60: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4a70: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4a80: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a 20  p = &aOp[pc];.. 
4a90: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
4aa0: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
4ab0: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
4ac0: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
4ad0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4ae0: 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
4af0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4b00: 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71  race ){.      sq
4b10: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4b20: 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f 70  (stdout, pc, pOp
4b30: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
4b40: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
4b50: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
4b60: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
4b70: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
4b80: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
4b90: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
4ba0: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
4bb0: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
4bc0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4bd0: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
4be0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
4bf0: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
4c00: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4c10: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
4c20: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
4c30: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
4c40: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
4c50: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
4c60: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4c70: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
4c80: 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77 69  On any opcode wi
4c90: 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72 65  th the "out2-pre
4ca0: 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66 72  release" tag, fr
4cb0: 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65 78  ee any.    ** ex
4cc0: 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69 6f  ternal allocatio
4cd0: 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70 32  ns out of mem[p2
4ce0: 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70 32  ] and set mem[p2
4cf0: 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20 61  ] to be.    ** a
4d00: 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74 65  n undefined inte
4d10: 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77 69  ger.  Opcodes wi
4d20: 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20 69  ll either fill i
4d30: 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20  n the integer.  
4d40: 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63 6f    ** value or co
4d50: 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74 6f  nvert mem[p2] to
4d60: 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79 70   a different typ
4d70: 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73  e..    */.    as
4d80: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61  sert( pOp->opfla
4d90: 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64  gs==sqlite3Opcod
4da0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
4db0: 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69 66  pcode] );.    if
4dc0: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26  ( pOp->opflags &
4dd0: 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52   OPFLG_OUT2_PRER
4de0: 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
4df0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
4e00: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
4e10: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4e20: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
4e30: 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d   );.      pOut =
4e40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
4e50: 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
4e60: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
4e70: 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d 52  ;.      VdbeMemR
4e80: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
4e90: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
4ea0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d  = MEM_Int;.    }
4eb0: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
4ec0: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
4ed0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
4ee0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4ef0: 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  G.    if( (pOp->
4f00: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
4f10: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
4f20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
4f30: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
4f40: 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d  rt( pOp->p1<=(p-
4f50: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
4f60: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
4f70: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
4f80: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
4f90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
4fa0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
4fb0: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
4fc0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
4fd0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
4fe0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
4ff0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
5000: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5010: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5020: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5030: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5040: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5050: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5060: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5070: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
5080: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5090: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
50a0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
50b0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
50c0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
50d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20  &aMem[pOp->p2]) 
50e0: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
50f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
5100: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5110: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5120: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5130: 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b  OPFLG_IN3)!=0 ){
5140: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5150: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5160: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5170: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
5180: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5190: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
51a0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
51b0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  3]) );.      ass
51c0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
51d0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
51e0: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  ts(&aMem[pOp->p3
51f0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
5200: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5210: 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
5220: 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  3]);.    }.    i
5230: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5240: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d   & OPFLG_OUT2)!=
5250: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5260: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5270: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5280: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
5290: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
52a0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
52b0: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
52c0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p2]);.    }.
52d0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
52e0: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
52f0: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5300: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5310: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5320: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
5330: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5340: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5350: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5360: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
5370: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20     }.#endif.  . 
5380: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
5390: 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a  opcode ){../****
53a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
53b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
53c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
53d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
53e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61  *********.** Wha
53f0: 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d  t follows is a m
5400: 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74  assive switch st
5410: 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61  atement where ea
5420: 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e  ch case implemen
5430: 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65  ts a.** separate
5440: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20   instruction in 
5450: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5460: 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c  ine.  If we foll
5470: 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20  ow the usual.** 
5480: 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76  indentation conv
5490: 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61  entions, each ca
54a0: 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  se should be ind
54b0: 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65  ented by 6 space
54c0: 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20  s.  But.** that 
54d0: 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74  is a lot of wast
54e0: 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20  ed space on the 
54f0: 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f  left margin.  So
5500: 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e   the code within
5510: 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73  .** the switch s
5520: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72  tatement will br
5530: 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74  eak with convent
5540: 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68  ion and be flush
5550: 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a  -left. Another.*
5560: 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73  * big comment (s
5570: 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f  imilar to this o
5580: 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68  ne) will mark th
5590: 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63  e point in the c
55a0: 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20  ode where.** we 
55b0: 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20  transition back 
55c0: 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74  to normal indent
55d0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ation..**.** The
55e0: 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65   formatting of e
55f0: 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f  ach case is impo
5600: 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65  rtant.  The make
5610: 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a  file for SQLite.
5620: 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f  ** generates two
5630: 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65   C files "opcode
5640: 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65  s.h" and "opcode
5650: 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67  s.c" by scanning
5660: 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f   this.** file lo
5670: 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20  oking for lines 
5680: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
5690: 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65  "case OP_".  The
56a0: 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73   opcodes.h files
56b0: 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c  .** will be fill
56c0: 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73  ed with #defines
56d0: 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75   that give uniqu
56e0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
56f0: 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f   to each.** opco
5700: 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64  de and the opcod
5710: 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c  es.c file is fil
5720: 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61  led with an arra
5730: 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65  y of strings whe
5740: 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e  re.** each strin
5750: 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69  g is the symboli
5760: 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  c name for the c
5770: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63  orresponding opc
5780: 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ode.  If the.** 
5790: 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69  case statement i
57a0: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
57b0: 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66  comment of the f
57c0: 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20  orm "/# same as 
57d0: 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20  ... #/".** that 
57e0: 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20  comment is used 
57f0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
5800: 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75   particular valu
5810: 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e  e of the opcode.
5820: 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79  .**.** Other key
5830: 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d  words in the com
5840: 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77  ment that follow
5850: 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20  s each case are 
5860: 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74  used to.** const
5870: 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49  ruct the OPFLG_I
5880: 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65  NITIALIZER value
5890: 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65   that initialize
58a0: 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  s opcodeProperty
58b0: 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20  []..** Keywords 
58c0: 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e  include: in1, in
58d0: 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72 65  2, in3, out2_pre
58e0: 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20 6f  release, out2, o
58f0: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5900: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5910: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5920: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5930: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5940: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5950: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5960: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5970: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5980: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5990: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
59a0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
59b0: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
59c0: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
59d0: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
59e0: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
59f0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5a00: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5a10: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5a20: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5a30: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5a40: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
5a50: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
5a60: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
5a70: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
5a80: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
5a90: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
5aa0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ae0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5af0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
5b00: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
5b10: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
5b20: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
5b30: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
5b40: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
5b50: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
5b60: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
5b70: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
5b80: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
5b90: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
5ba0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  he program..**.*
5bb0: 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65 74  * The P1 paramet
5bc0: 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  er is not actual
5bd0: 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ly used by this 
5be0: 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72  opcode.  However
5bf0: 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74  , it.** is somet
5c00: 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e  imes set to 1 in
5c10: 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61 20  stead of 0 as a 
5c20: 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d  hint to the comm
5c30: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a  and-line shell.*
5c40: 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f  * that this Goto
5c50: 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   is the bottom o
5c60: 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61  f a loop and tha
5c70: 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d  t the lines from
5c80: 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74   P2 down.** to t
5c90: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  he current line 
5ca0: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
5cb0: 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ed for EXPLAIN o
5cc0: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
5cd0: 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20  P_Goto: {       
5ce0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
5cf0: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
5d00: 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64  - 1;..  /* Opcod
5d10: 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  es that are used
5d20: 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   as the bottom o
5d30: 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78  f a loop (OP_Nex
5d40: 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a  t, OP_Prev,.  **
5d50: 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f   OP_VNext, OP_Ro
5d60: 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f  wSetNext, or OP_
5d70: 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20  SorterNext) all 
5d80: 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20  jump here upon. 
5d90: 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20   ** completion. 
5da0: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
5db0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5dc0: 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  pt() has been ca
5dd0: 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20  lled.  ** or if 
5de0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5df0: 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62  lback needs to b
5e00: 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a  e invoked. .  **
5e10: 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20  .  ** This code 
5e20: 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72 65  uses unstructure
5e30: 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65  d "goto" stateme
5e40: 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74  nts and does not
5e50: 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a   look clean..  *
5e60: 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f  * But that is no
5e70: 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20  t due to sloppy 
5e80: 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54  coding habits. T
5e90: 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74 74  he code is writt
5ea0: 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79  en this.  ** way
5eb0: 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65   for performance
5ec0: 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e  , to avoid havin
5ed0: 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74  g to run the int
5ee0: 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72  errupt and progr
5ef0: 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ess.  ** checks 
5f00: 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e  on every opcode.
5f10: 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c    This helps sql
5f20: 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72  ite3_step() to r
5f30: 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20  un about 1.5%.  
5f40: 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72 64  ** faster accord
5f50: 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64  ing to "valgrind
5f60: 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69   --tool=cachegri
5f70: 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72  nd" */.check_for
5f80: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66  _interrupt:.  if
5f90: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
5fa0: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
5fb0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
5fc0: 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rupt;.#ifndef SQ
5fd0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
5fe0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
5ff0: 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65   Call the progre
6000: 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69  ss callback if i
6010: 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20  t is configured 
6020: 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65 64  and the required
6030: 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20   number.  ** of 
6040: 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62 65  VDBE ops have be
6050: 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69 74  en executed (eit
6060: 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20 69  her since this i
6070: 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a  nvocation of.  *
6080: 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  * sqlite3VdbeExe
6090: 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73  c() or since las
60a0: 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72  t time the progr
60b0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73  ess callback was
60c0: 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49   called)..  ** I
60d0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
60e0: 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20  allback returns 
60f0: 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74  non-zero, exit t
6100: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
6110: 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72  ne with.  ** a r
6120: 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54  eturn code SQLIT
6130: 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20  E_ABORT..  */.  
6140: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
6150: 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e  s!=0 && nVmStep>
6160: 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20  =nProgressLimit 
6170: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
6180: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21  b->nProgressOps!
6190: 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  =0 );.    nProgr
61a0: 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74  essLimit = nVmSt
61b0: 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65  ep + db->nProgre
61c0: 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70  ssOps - (nVmStep
61d0: 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70  %db->nProgressOp
61e0: 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  s);.    if( db->
61f0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
6200: 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20  rogressArg) ){. 
6210: 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
6220: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
6230: 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
6240: 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20 20  r_halt;.    }.  
6250: 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72  }.#endif.  .  br
6260: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
6270: 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20  e:  Gosub P1 P2 
6280: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  * * *.**.** Writ
6290: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64  e the current ad
62a0: 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73  dress onto regis
62b0: 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68  ter P1.** and th
62c0: 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  en jump to addre
62d0: 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ss P2..*/.case O
62e0: 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20  P_Gosub: {      
62f0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
6300: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6310: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
6320: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6330: 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20  rsor) );.  pIn1 
6340: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6350: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
6360: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
6370: 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75  ==0 );.  memAbou
6380: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
6390: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  1);.  pIn1->flag
63a0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
63b0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20  In1->u.i = pc;. 
63c0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
63d0: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
63e0: 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
63f0: 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   1;.  break;.}..
6400: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75  /* Opcode:  Retu
6410: 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  rn P1 * * * *.**
6420: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
6430: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
6440: 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65   after the addre
6450: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
6460: 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65  1.  After.** the
6470: 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20   jump, register 
6480: 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66  P1 becomes undef
6490: 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
64a0: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
64b0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
64c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
64d0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
64e0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
64f0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20 3d  EM_Int );.  pc =
6500: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
6510: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6520: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
6530: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6540: 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75  pcode: InitCorou
6550: 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20  tine P1 P2 P3 * 
6560: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72  *.**.** Set up r
6570: 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68  egister P1 so th
6580: 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64  at it will Yield
6590: 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   to the coroutin
65a0: 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20  e.** located at 
65b0: 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a  address P3..**.*
65c0: 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20  * If P2!=0 then 
65d0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d  the coroutine im
65e0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d  plementation imm
65f0: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
6600: 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
6610: 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74    So jump over t
6620: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
6630: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a  lementation to.*
6640: 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  * address P2..**
6650: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e  .** See also: En
6660: 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  dCoroutine.*/.ca
6670: 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74  se OP_InitCorout
6680: 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75  ine: {     /* ju
6690: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
66a0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f  pOp->p1>0 &&  pO
66b0: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p1<=(p->nMem-
66c0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
66d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
66e0: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  >=0 && pOp->p2<p
66f0: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72  ->nOp );.  asser
6700: 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26  t( pOp->p3>=0 &&
6710: 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20   pOp->p3<p->nOp 
6720: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
6730: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6740: 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79  sert( !VdbeMemDy
6750: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20  namic(pOut) );. 
6760: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
6770: 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74  ->p3 - 1;.  pOut
6780: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
6790: 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  t;.  if( pOp->p2
67a0: 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
67b0: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
67c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64  ./* Opcode:  End
67d0: 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a  Coroutine P1 * *
67e0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69   * *.**.** The i
67f0: 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68  nstruction at th
6800: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
6810: 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69  ister P1 is a Yi
6820: 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  eld..** Jump to 
6830: 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72  the P2 parameter
6840: 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a   of that Yield..
6850: 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d  ** After the jum
6860: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
6870: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
6880: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
6890: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
68a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f  */.case OP_EndCo
68b0: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20  routine: {      
68c0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
68d0: 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72   VdbeOp *pCaller
68e0: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
68f0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6900: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6910: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  ==MEM_Int );.  a
6920: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69  ssert( pIn1->u.i
6930: 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69  >=0 && pIn1->u.i
6940: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61  <p->nOp );.  pCa
6950: 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31  ller = &aOp[pIn1
6960: 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74  ->u.i];.  assert
6970: 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64  ( pCaller->opcod
6980: 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20  e==OP_Yield );. 
6990: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
69a0: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c  ->p2>=0 && pCall
69b0: 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  er->p2<p->nOp );
69c0: 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65 72 2d  .  pc = pCaller-
69d0: 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e 31 2d  >p2 - 1;.  pIn1-
69e0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
69f0: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6a00: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6a10: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
6a20: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6a30: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6a40: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6a50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6a60: 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65   This.** has the
6a70: 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64   effect of yield
6a80: 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69  ing to a corouti
6a90: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ne..**.** If the
6aa0: 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20   coroutine that 
6ab0: 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  is launched by t
6ac0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
6ad0: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65  ends with.** Yie
6ae0: 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65  ld or Return the
6af0: 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68  n continue to th
6b00: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6b10: 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74  on.  But if.** t
6b20: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75  he coroutine lau
6b30: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
6b40: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
6b50: 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74  ith.** EndCorout
6b60: 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ine, then jump t
6b70: 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61 6e  o P2 rather than
6b80: 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68   continuing with
6b90: 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73   the.** next ins
6ba0: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
6bb0: 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f  See also: InitCo
6bc0: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
6bd0: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
6be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a         /* in1, j
6bf0: 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  ump */.  int pcD
6c00: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
6c10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c20: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
6c30: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
6c40: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6c50: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
6c60: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
6c70: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
6c80: 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53  .i = pc;.  REGIS
6c90: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
6ca0: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d  1, pIn1);.  pc =
6cb0: 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65 61 6b   pcDest;.  break
6cc0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6cd0: 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20   HaltIfNull  P1 
6ce0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
6cf0: 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
6d00: 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a  3]=null halt.**.
6d10: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
6d20: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6d30: 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c  3.  If it is NUL
6d40: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
6d50: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
6d60: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
6d70: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
6d80: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
6d90: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
6da0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6db0: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
6dc0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
6dd0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20   is a no-op..** 
6de0: 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
6df0: 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f   should be 1..*/
6e00: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
6e10: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
6e20: 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
6e30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
6e40: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
6e50: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
6e60: 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
6e70: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
6e80: 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f   OP_Halt */.}../
6e90: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20  * Opcode:  Halt 
6ea0: 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
6eb0: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
6ec0: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
6ed0: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
6ee0: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
6ef0: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
6f00: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
6f10: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
6f20: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
6f30: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
6f40: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
6f50: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
6f60: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
6f70: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
6f80: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
6f90: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
6fa0: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
6fb0: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
6fc0: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
6fd0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
6fe0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
6ff0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
7000: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
7010: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
7020: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
7030: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
7040: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
7050: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
7060: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
7070: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
7080: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
7090: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
70a0: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
70b0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
70c0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
70d0: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
70e0: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
70f0: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
7100: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
7110: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
7120: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20  ng..**.** P5 is 
7130: 61 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20  a value between 
7140: 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69  0 and 4, inclusi
7150: 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65  ve, that modifie
7160: 73 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  s the P4 string.
7170: 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e  .**.**    0:  (n
7180: 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20  o change).**    
7190: 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  1:  NOT NULL con
71a0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
71b0: 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51  4.**    2:  UNIQ
71c0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
71d0: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33  iled: P4.**    3
71e0: 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  :  CHECK constra
71f0: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7200: 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e  *    4:  FOREIGN
7210: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
7220: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a  failed: P4.**.**
7230: 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
7240: 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c  ro and P4 is NUL
7250: 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68 69  L, then everythi
7260: 6e 67 20 61 66 74 65 72 20 74 68 65 20 22 3a 22  ng after the ":"
7270: 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a   is.** omitted..
7280: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61  **.** There is a
7290: 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20  n implied "Halt 
72a0: 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69  0 0 0" instructi
72b0: 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  on inserted at t
72c0: 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a  he very end of.*
72d0: 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e  * every program.
72e0: 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74    So a jump past
72f0: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75   the last instru
7300: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  ction of the pro
7310: 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73  gram.** is the s
7320: 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67  ame as executing
7330: 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Halt..*/.case O
7340: 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63 6f 6e 73  P_Halt: {.  cons
7350: 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 0a 20  t char *zType;. 
7360: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 6f   const char *zLo
7370: 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20 70 4f 70  gFmt;..  if( pOp
7380: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
7390: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
73a0: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
73b0: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
73c0: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
73d0: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
73e0: 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72 61 6d   */.    VdbeFram
73f0: 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70  e *pFrame = p->p
7400: 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46  Frame;.    p->pF
7410: 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70  rame = pFrame->p
7420: 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e  Parent;.    p->n
7430: 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c  Frame--;.    sql
7440: 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
7450: 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
7460: 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73 71 6c  e);.    pc = sql
7470: 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73  ite3VdbeFrameRes
7480: 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20  tore(pFrame);.  
7490: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
74a0: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
74b0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
74c0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
74d0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
74e0: 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f  pc is the OP_Pro
74f0: 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65  gram that invoke
7500: 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  d the sub-progra
7510: 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  m .      ** curr
7520: 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74  ently being halt
7530: 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e  ed. If the p2 in
7540: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69  struction of thi
7550: 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20  s OP_Halt.      
7560: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
7570: 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f  s set to OE_Igno
7580: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62  re, then the sub
7590: 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f  -program is thro
75a0: 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e  wing.      ** an
75b0: 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f   IGNORE exceptio
75c0: 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  n. In this case 
75d0: 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72  jump to the addr
75e0: 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20  ess specified.  
75f0: 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32      ** as the p2
7600: 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
7610: 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a  OP_Program.  */.
7620: 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e 61 4f        pc = p->aO
7630: 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20 20 20  p[pc].p2-1;.    
7640: 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61  }.    aOp = p->a
7650: 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70  Op;.    aMem = p
7660: 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72 65 61  ->aMem;.    brea
7670: 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d  k;.  }.  p->rc =
7680: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65   pOp->p1;.  p->e
7690: 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38  rrorAction = (u8
76a0: 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70  )pOp->p2;.  p->p
76b0: 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20 70 2d  c = pc;.  if( p-
76c0: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
76d0: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
76e0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
76f0: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
7700: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
7710: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
7720: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
7730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7750: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
7760: 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   };.      assert
7770: 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20  ( pOp->p5>=1 && 
7780: 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20  pOp->p5<=4 );.  
7790: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
77a0: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
77b0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
77c0: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
77d0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
77e0: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
77f0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7800: 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70  =4 );.      zTyp
7810: 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e  e = azType[pOp->
7820: 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  p5-1];.    }else
7830: 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  {.      zType = 
7840: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  0;.    }.    ass
7850: 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c  ert( zType!=0 ||
7860: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
7870: 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22  .    zLogFmt = "
7880: 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b  abort at %d in [
7890: 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66  %s]: %s";.    if
78a0: 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e  ( zType && pOp->
78b0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71  p4.z ){.      sq
78c0: 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
78d0: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
78e0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
78f0: 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a 20 20 20  ailed: %s", .   
7900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7910: 20 20 20 20 7a 54 79 70 65 2c 20 70 4f 70 2d 3e      zType, pOp->
7920: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
7930: 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29   if( pOp->p4.z )
7940: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
7950: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
7960: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
7970: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
7980: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
7990: 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
79a0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
79b0: 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  %s constraint fa
79c0: 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20  iled", zType);. 
79d0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
79e0: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c  _log(pOp->p1, zL
79f0: 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d 3e 7a 53  ogFmt, pc, p->zS
7a00: 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
7a10: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
7a20: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
7a30: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
7a40: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
7a50: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
7a60: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
7a70: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
7a80: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
7a90: 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
7aa0: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
7ab0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
7ac0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
7ad0: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
7ae0: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29  ITE_CONSTRAINT )
7af0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
7b00: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64  ==SQLITE_OK || d
7b10: 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
7b20: 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  >0 || db->nDefer
7b30: 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a  redImmCons>0 );.
7b40: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
7b50: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
7b60: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
7b70: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
7b80: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
7b90: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
7ba0: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
7bb0: 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a  is: r[P2]=P1.**.
7bc0: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
7bd0: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
7be0: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
7bf0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7c00: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
7c10: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
7c20: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7c30: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
7c40: 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  p->p1;.  break;.
7c50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
7c60: 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  t64 * P2 * P4 *.
7c70: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
7c80: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
7c90: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
7ca0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
7cb0: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
7cc0: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
7cd0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
7ce0: 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b  case OP_Int64: {
7cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
7d00: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
7d10: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7d20: 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20  p4.pI64!=0 );.  
7d30: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70  pOut->u.i = *pOp
7d40: 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
7d50: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
7d60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
7d70: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
7d80: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
7d90: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
7da0: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
7db0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
7dc0: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
7dd0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
7de0: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
7df0: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
7e00: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
7e10: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
7e20: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
7e30: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
7e40: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
7e50: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7e60: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
7e70: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
7e80: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
7e90: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72 20 3d  ) );.  pOut->r =
7ea0: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
7eb0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
7ec0: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
7ed0: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
7ee0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7ef0: 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  r[P2]='P4'.**.**
7f00: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
7f10: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
7f20: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
7f30: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
7f40: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
7f50: 20 61 20 53 74 72 69 6e 67 20 62 65 66 6f 72 65   a String before
7f60: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
7f70: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
7f80: 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74  me.  During.** t
7f90: 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  his transformati
7fa0: 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  on, the length o
7fb0: 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63  f string P4 is c
7fc0: 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72  omputed and stor
7fd0: 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20  ed.** as the P1 
7fe0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61  parameter..*/.ca
7ff0: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
8000: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8010: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
8020: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
8030: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
8040: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
8050: 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53  p->opcode = OP_S
8060: 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31  tring;.  pOp->p1
8070: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
8080: 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a  30(pOp->p4.z);..
8090: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
80a0: 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20  MIT_UTF16.  if( 
80b0: 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45  encoding!=SQLITE
80c0: 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20  _UTF8 ){.    rc 
80d0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
80e0: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
80f0: 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49  ->p4.z, -1, SQLI
8100: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
8110: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28  STATIC);.    if(
8120: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42   rc==SQLITE_TOOB
8130: 49 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  IG ) goto too_bi
8140: 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  g;.    if( SQLIT
8150: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
8160: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
8170: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
8180: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
8190: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d     assert( pOut-
81a0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
81b0: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
81c0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
81d0: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
81e0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20  pOut->zMalloc = 
81f0: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
8200: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
8210: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8220: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
8230: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
8240: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
8250: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8260: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
8270: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
8280: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
8290: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
82a0: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
82b0: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
82c0: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
82d0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
82e0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
82f0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
8300: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
8310: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
8320: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
8330: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
8340: 53 74 72 69 6e 67 20 50 31 20 50 32 20 2a 20 50  String P1 P2 * P
8350: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8360: 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e   r[P2]='P4' (len
8370: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  =P1).**.** The s
8380: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
8390: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
83a0: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
83b0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
83c0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a  .case OP_String:
83d0: 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f   {          /* o
83e0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
83f0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
8400: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
8410: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
8420: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
8430: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
8440: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
8450: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
8460: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
8470: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
8480: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
8490: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
84a0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
84b0: 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a   Null P1 P2 P3 *
84c0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
84d0: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
84e0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
84f0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8500: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
8510: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
8520: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
8530: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8540: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
8550: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
8560: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
8570: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
8580: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
8590: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
85a0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
85b0: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
85c0: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
85d0: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
85e0: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
85f0: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
8600: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
8610: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
8620: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
8630: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
8640: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
8650: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
8660: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
8670: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
8680: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8690: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
86a0: 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20   */.  int cnt;. 
86b0: 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20   u16 nullFlag;. 
86c0: 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70   cnt = pOp->p3-p
86d0: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
86e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
86f0: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8700: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8710: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
8720: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
8730: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
8740: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69   MEM_Null;.  whi
8750: 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20  le( cnt>0 ){.   
8760: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d   pOut++;.    mem
8770: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
8780: 20 70 4f 75 74 29 3b 0a 20 20 20 20 56 64 62 65   pOut);.    Vdbe
8790: 4d 65 6d 52 65 6c 65 61 73 65 28 70 4f 75 74 29  MemRelease(pOut)
87a0: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
87b0: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
87c0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
87d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
87e0: 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20  de: SoftNull P1 
87f0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  * * * *.** Synop
8800: 73 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c  sis:  r[P1]=NULL
8810: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73  .**.** Set regis
8820: 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74  ter P1 to have t
8830: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73  he value NULL as
8840: 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f   seen by the OP_
8850: 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e  MakeRecord.** in
8860: 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64  struction, but d
8870: 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73  o not free any s
8880: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65  tring or blob me
8890: 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20  mory associated 
88a0: 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69  with.** the regi
88b0: 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66  ster, so that if
88c0: 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61   the value was a
88d0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
88e0: 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76  that was.** prev
88f0: 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73  iously copied us
8900: 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68  ing OP_SCopy, th
8910: 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f  e copies will co
8920: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c  ntinue to be val
8930: 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  id..*/.case OP_S
8940: 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73  oftNull: {.  ass
8950: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
8960: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
8970: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
8980: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
8990: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
89a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75  ut->flags = (pOu
89b0: 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c  t->flags|MEM_Nul
89c0: 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  l)&~MEM_Undefine
89d0: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
89e0: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
89f0: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
8a00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8a10: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
8a20: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
8a30: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
8a40: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
8a50: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
8a60: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
8a70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
8a80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
8a90: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
8aa0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
8ab0: 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c  ( pOp->p1 <= SQL
8ac0: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29  ITE_MAX_LENGTH )
8ad0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
8ae0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
8af0: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
8b00: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
8b10: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
8b20: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8b30: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
8b40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8b50: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
8b60: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
8b70: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
8b80: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
8b90: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
8ba0: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
8bb0: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
8bc0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8bd0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
8be0: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
8bf0: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
8c00: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
8c10: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
8c20: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
8c30: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
8c40: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
8c50: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
8c60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8c70: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8c80: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
8c90: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
8ca0: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
8cb0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
8cc0: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
8cd0: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
8ce0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8cf0: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
8d00: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
8d10: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
8d20: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
8d30: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
8d40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
8d50: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
8d60: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
8d70: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
8d80: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
8d90: 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f  pOut, pVar, MEM_
8da0: 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54  Static);.  UPDAT
8db0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
8dc0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
8dd0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76  ../* Opcode: Mov
8de0: 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
8df0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
8e00: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
8e10: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
8e20: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
8e30: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
8e40: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
8e50: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
8e60: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
8e70: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
8e80: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
8e90: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
8ea0: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
8eb0: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
8ec0: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
8ed0: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
8ee0: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
8ef0: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
8f00: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
8f10: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
8f20: 76 65 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d  ve: {.  char *zM
8f30: 61 6c 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64  alloc;   /* Hold
8f40: 69 6e 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72  ing variable for
8f50: 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72   allocated memor
8f60: 79 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  y */.  int n;   
8f70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8f80: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
8f90: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
8fa0: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
8fb0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
8fc0: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
8fd0: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
8fe0: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
8ff0: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
9000: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
9010: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
9020: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
9030: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
9040: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
9050: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
9060: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
9070: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31   pIn1 = &aMem[p1
9080: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9090: 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  m[p2];.  do{.   
90a0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
90b0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
90c0: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
90d0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
90e0: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70  &aMem[(p->nMem-p
90f0: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9100: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
9110: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
9120: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
9130: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9140: 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65    VdbeMemRelease
9150: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c  (pOut);.    zMal
9160: 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c  loc = pOut->zMal
9170: 6c 6f 63 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28  loc;.    memcpy(
9180: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 73 69 7a 65  pOut, pIn1, size
9190: 6f 66 28 4d 65 6d 29 29 3b 0a 23 69 66 64 65 66  of(Mem));.#ifdef
91a0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
91b0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
91c0: 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31  pyFrom>=&aMem[p1
91d0: 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70  ] && pOut->pScop
91e0: 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70  yFrom<&aMem[p1+p
91f0: 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20 20  Op->p3] ){.     
9200: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9210: 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e 70  m += p1 - pOp->p
9220: 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  2;.    }.#endif.
9230: 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20      pIn1->flags 
9240: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
9250: 0a 20 20 20 20 70 49 6e 31 2d 3e 78 44 65 6c 20  .    pIn1->xDel 
9260: 3d 20 30 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a  = 0;.    pIn1->z
9270: 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63  Malloc = zMalloc
9280: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9290: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
92a0: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
92b0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
92c0: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
92d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
92e0: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
92f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9300: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
9310: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
9320: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
9330: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
9340: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9350: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
9360: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
9370: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
9380: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9390: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
93a0: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
93b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
93c0: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
93d0: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
93e0: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
93f0: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
9400: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
9410: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9420: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9430: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
9440: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
9450: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
9460: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9470: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
9480: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9490: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
94a0: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
94b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
94c0: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
94d0: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
94e0: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
94f0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
9500: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
9510: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
9520: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
9530: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
9540: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
9550: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9560: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
9570: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9580: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9590: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
95a0: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
95b0: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
95c0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
95d0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
95e0: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
95f0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9600: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
9610: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
9620: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9630: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9640: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9650: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9660: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9670: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9680: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9690: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
96a0: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
96b0: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
96c0: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
96d0: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
96e0: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
96f0: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
9700: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
9710: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
9720: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9730: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9740: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9750: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9760: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9770: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9780: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9790: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
97a0: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
97b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
97c0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
97d0: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
97e0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
97f0: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9800: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
9810: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9820: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9830: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
9840: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
9850: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
9860: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9870: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
9880: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9890: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
98a0: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
98b0: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
98c0: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
98d0: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
98e0: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
98f0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
9900: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
9910: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
9920: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
9930: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
9940: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
9950: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
9960: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
9970: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
9980: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
9990: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
99a0: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
99b0: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
99c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
99d0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
99e0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
99f0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
9a00: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
9a10: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9a20: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
9a30: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
9a40: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
9a50: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
9a60: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9a70: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9a80: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
9a90: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
9aa0: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
9ab0: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
9ac0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
9ad0: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
9ae0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
9af0: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
9b00: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
9b10: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
9b20: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
9b30: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
9b40: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
9b50: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
9b60: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
9b70: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
9b80: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
9b90: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
9ba0: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
9bb0: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
9bc0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
9bd0: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
9be0: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
9bf0: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
9c00: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
9c10: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
9c20: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
9c30: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
9c40: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
9c50: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
9c60: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
9c70: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
9c80: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
9c90: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
9ca0: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
9cb0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
9cc0: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
9cd0: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
9ce0: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
9cf0: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
9d00: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
9d10: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
9d20: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
9d30: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
9d40: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
9d50: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
9d60: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
9d70: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
9d80: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
9d90: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
9da0: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
9db0: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
9dc0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
9dd0: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
9de0: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
9df0: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
9e00: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
9e10: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
9e20: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
9e30: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
9e40: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
9e50: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
9e60: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
9e70: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
9e80: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
9e90: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
9ea0: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
9eb0: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
9ec0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
9ed0: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
9ee0: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
9ef0: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
9f00: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
9f10: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
9f20: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
9f30: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
9f40: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
9f50: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
9f60: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
9f70: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
9f80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
9f90: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
9fa0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
9fb0: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
9fc0: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
9fd0: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
9fe0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
9ff0: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
a000: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
a010: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a020: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a030: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
a040: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
a050: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
a060: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
a070: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
a080: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
a090: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
a0a0: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
a0b0: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
a0c0: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
a0d0: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
a0e0: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
a0f0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
a100: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
a110: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
a120: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
a130: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
a140: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
a150: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
a160: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
a170: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
a180: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
a190: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
a1a0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
a1b0: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
a1c0: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
a1d0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
a1e0: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
a1f0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
a200: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
a210: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
a220: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
a230: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
a240: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
a250: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
a260: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
a270: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
a280: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
a290: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
a2a0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a2b0: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
a2c0: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a2d0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
a2e0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
a2f0: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
a300: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
a310: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
a320: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
a330: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
a340: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a350: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
a360: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a370: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
a380: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
a390: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
a3a0: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
a3b0: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
a3c0: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
a3d0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a3e0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a3f0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a400: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
a410: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
a420: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
a430: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
a440: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
a450: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
a460: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
a470: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a480: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
a490: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
a4a0: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
a4b0: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
a4c0: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
a4d0: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
a4e0: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
a4f0: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
a500: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a510: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
a520: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
a530: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
a540: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a550: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
a560: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
a570: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a580: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
a590: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
a5a0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
a5b0: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
a5c0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
a5d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a5e0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
a5f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
a600: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
a610: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
a620: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
a630: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
a640: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
a650: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
a660: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
a670: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
a680: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
a690: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
a6a0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
a6b0: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
a6c0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
a6d0: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
a6e0: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
a6f0: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
a700: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
a710: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
a720: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
a730: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
a740: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
a750: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
a760: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
a770: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
a780: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
a790: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
a7a0: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
a7b0: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
a7c0: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
a7d0: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
a7e0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
a7f0: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
a800: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
a810: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
a820: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
a830: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
a840: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
a850: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
a860: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
a870: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
a880: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
a890: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
a8a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a8b0: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
a8c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
a8d0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
a8e0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a8f0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
a900: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
a910: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a920: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a930: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
a940: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
a950: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
a960: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
a970: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
a980: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
a990: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
a9a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a9b0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
a9c0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
a9d0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
a9e0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
a9f0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
aa00: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
aa10: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
aa20: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
aa30: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
aa40: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
aa50: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
aa60: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aa70: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
aa80: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
aa90: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
aaa0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
aab0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
aac0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
aad0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
aae0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
aaf0: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
ab00: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
ab10: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
ab20: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
ab30: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
ab40: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
ab50: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
ab60: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
ab70: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
ab80: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
ab90: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
aba0: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
abb0: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
abc0: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
abd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
abe0: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
abf0: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
ac00: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
ac10: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
ac20: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
ac30: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
ac40: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
ac50: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
ac60: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
ac70: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
ac80: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
ac90: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
aca0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
acb0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
acc0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
acd0: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
ace0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
acf0: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
ad00: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
ad10: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
ad20: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
ad30: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ad40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
ad50: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ad60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ad70: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
ad80: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ad90: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
ada0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
adb0: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
adc0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
add0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
ade0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
adf0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
ae00: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
ae10: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
ae20: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
ae30: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ae40: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
ae50: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ae60: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
ae70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ae80: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
ae90: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
aea0: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
aeb0: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
aec0: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
aed0: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
aee0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
aef0: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
af00: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
af10: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
af20: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
af30: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
af40: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
af50: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
af60: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
af70: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
af80: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
af90: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
afa0: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
afb0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
afc0: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
afd0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
afe0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
aff0: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
b000: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
b010: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b020: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
b030: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b040: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b050: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
b060: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b070: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
b080: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
b090: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b0a0: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
b0b0: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b0c0: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
b0d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b0e0: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
b0f0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b100: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
b110: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
b120: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b130: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b140: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
b150: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
b160: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
b170: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
b180: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
b190: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
b1a0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b1b0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b1c0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b1d0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
b1e0: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
b1f0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b200: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b210: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b220: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
b230: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
b240: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
b250: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b260: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
b270: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
b280: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b290: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b2a0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b2b0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
b2c0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b2d0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b2e0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b2f0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b300: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
b310: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
b320: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
b330: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
b340: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b350: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
b360: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b370: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b380: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b390: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b3a0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b3b0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
b3c0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b3d0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b3e0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b3f0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
b400: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b410: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
b420: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
b430: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
b440: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
b450: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
b460: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
b470: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b480: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
b490: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b4a0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b4b0: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
b4c0: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
b4d0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b4e0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
b4f0: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
b500: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b510: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
b520: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
b530: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b540: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
b550: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
b560: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
b570: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b580: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
b590: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
b5a0: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
b5b0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b5c0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
b5d0: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
b5e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b5f0: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
b600: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
b610: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
b620: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
b630: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b640: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b650: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b660: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b670: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b680: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
b690: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
b6a0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
b6b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
b6c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
b6d0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
b6e0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b6f0: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
b700: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b710: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
b720: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
b730: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
b740: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b750: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b760: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
b770: 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  r = rB;.    MemS
b780: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
b790: 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20   MEM_Real);.    
b7a0: 69 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65  if( ((type1|type
b7b0: 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20  2)&MEM_Real)==0 
b7c0: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
b7d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b7e0: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
b7f0: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
b800: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
b810: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
b820: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
b830: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b840: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
b850: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b860: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
b870: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
b880: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
b890: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
b8a0: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
b8b0: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
b8c0: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
b8d0: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
b8e0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
b8f0: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
b900: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
b910: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
b920: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
b930: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
b940: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
b950: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
b960: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
b970: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
b980: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
b990: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
b9a0: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
b9b0: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
b9c0: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
b9d0: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
b9e0: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
b9f0: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
ba00: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
ba10: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
ba20: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
ba30: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
ba40: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
ba50: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
ba60: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
ba70: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
ba80: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
ba90: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
baa0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
bab0: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
bac0: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
bad0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
bae0: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
baf0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
bb00: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
bb10: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
bb20: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
bb30: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
bb40: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
bb50: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
bb60: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
bb70: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
bb80: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
bb90: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
bba0: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
bbb0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
bbc0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
bbd0: 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a  func(r[P2@P5]).*
bbe0: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
bbf0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
bc00: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
bc10: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
bc20: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
bc30: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
bc40: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
bc50: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
bc60: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
bc70: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
bc80: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
bc90: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
bca0: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
bcb0: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
bcc0: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
bcd0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
bce0: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
bcf0: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
bd00: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
bd10: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
bd20: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
bd30: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
bd40: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
bd50: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
bd60: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
bd70: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
bd80: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
bd90: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
bda0: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
bdb0: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
bdc0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
bdd0: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
bde0: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
bdf0: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
be00: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
be10: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
be20: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
be30: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
be40: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
be50: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
be60: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
be70: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
be80: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
be90: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
bea0: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
beb0: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
bec0: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
bed0: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
bee0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
bef0: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b  *apVal;.  int n;
bf00: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
bf10: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
bf20: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
bf30: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
bf40: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
bf50: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
bf60: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
bf70: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
bf80: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
bf90: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
bfa0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
bfb0: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
bfc0: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
bfd0: 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
bfe0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
bff0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
c000: 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
c010: 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
c020: 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d  p2+n );.  pArg =
c030: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
c040: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
c050: 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20   i++, pArg++){. 
c060: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
c070: 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a 20  Valid(pArg) );. 
c080: 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41     apVal[i] = pA
c090: 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  rg;.    Deepheme
c0a0: 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20 20  ralize(pArg);.  
c0b0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
c0c0: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67  (pOp->p2+i, pArg
c0d0: 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  );.  }..  assert
c0e0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
c0f0: 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63  4_FUNCDEF );.  c
c100: 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
c110: 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e  p4.pFunc;.  ctx.
c120: 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e  iOp = pc;.  ctx.
c130: 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a  pVdbe = p;..  /*
c140: 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
c150: 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
c160: 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
c170: 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
c180: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63  the pointer to c
c190: 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  tx.s so in case 
c1a0: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
c1b0: 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74  n can use.  ** t
c1c0: 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
c1d0: 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
c1e0: 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
c1f0: 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a  g a new one..  *
c200: 2f 0a 20 20 6d 65 6d 63 70 79 28 26 63 74 78 2e  /.  memcpy(&ctx.
c210: 73 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f 66 28  s, pOut, sizeof(
c220: 4d 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  Mem));.  pOut->f
c230: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
c240: 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
c250: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  0;.  pOut->zMall
c260: 6f 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53 65 74  oc = 0;.  MemSet
c270: 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c  TypeFlag(&ctx.s,
c280: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63   MEM_Null);..  c
c290: 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d  tx.fErrorOrAux =
c2a0: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
c2b0: 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26  unc->funcFlags &
c2c0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
c2d0: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
c2e0: 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a  ert( pOp>aOp );.
c2f0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
c300: 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
c310: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
c320: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
c330: 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
c340: 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
c350: 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
c360: 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  Coll;.  }.  db->
c370: 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
c380: 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70  Rowid;.  (*ctx.p
c390: 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74  Func->xFunc)(&ct
c3a0: 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
c3b0: 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
c3c0: 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77  230 */.  lastRow
c3d0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
c3e0: 69 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d  id;..  if( db->m
c3f0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
c400: 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67     /* Even thoug
c410: 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  h a malloc() has
c420: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70   failed, the imp
c430: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
c440: 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66  he.    ** user f
c450: 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  unction may have
c460: 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74   called an sqlit
c470: 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20  e3_result_XXX() 
c480: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20  function.    ** 
c490: 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  to return a valu
c4a0: 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e. The following
c4b0: 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61   call releases a
c4c0: 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20  ny resources.   
c4d0: 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77   ** associated w
c4e0: 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65  ith such a value
c4f0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
c500: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
c510: 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20  se(&ctx.s);.    
c520: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
c530: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
c540: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
c550: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
c560: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
c570: 20 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72    if( ctx.fError
c580: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
c590: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
c5a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
c5b0: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
c5c0: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
c5d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
c5e0: 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20  (&ctx.s));.     
c5f0: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
c600: 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  r;.    }.    sql
c610: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
c620: 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70  xData(p, pc, pOp
c630: 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ->p1);.  }..  /*
c640: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
c650: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c660: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
c670: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
c680: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
c690: 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e  (&ctx.s, encodin
c6a0: 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  g);.  assert( pO
c6b0: 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ut->flags==MEM_N
c6c0: 75 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70 79 28  ull );.  memcpy(
c6d0: 70 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20 73 69  pOut, &ctx.s, si
c6e0: 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 69 66  zeof(Mem));.  if
c6f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
c700: 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a  TooBig(pOut) ){.
c710: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
c720: 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f  ;.  }..#if 0.  /
c730: 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65  * The app-define
c740: 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64  d function has d
c750: 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  one something th
c760: 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69  at as caused thi
c770: 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  s.  ** statement
c780: 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65   to expire.  (Pe
c790: 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69  rhaps the functi
c7a0: 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65  on called sqlite
c7b0: 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69  3_exec().  ** wi
c7c0: 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  th a CREATE TABL
c7d0: 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20  E statement.).  
c7e0: 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  */.  if( p->expi
c7f0: 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  red ) rc = SQLIT
c800: 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a  E_ABORT;.#endif.
c810: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
c820: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
c830: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
c840: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
c850: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c860: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
c870: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c880: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
c890: 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]&r[P2].**.** 
c8a0: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
c8b0: 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  e AND of the val
c8c0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
c8d0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
c8e0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
c8f0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c900: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
c910: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
c920: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
c930: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
c940: 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a  BitOr P1 P2 P3 *
c950: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
c960: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50   r[P3]=r[P1]|r[P
c970: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
c980: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
c990: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
c9a0: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
c9b0: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
c9c0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c9d0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
c9e0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
c9f0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ca00: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ca10: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
ca20: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
ca30: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
ca40: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
ca50: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
ca60: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
ca70: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
ca80: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
ca90: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
caa0: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
cab0: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
cac0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
cad0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
cae0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
caf0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
cb00: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
cb10: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
cb20: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
cb30: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
cb40: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
cb50: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e  :  r[P3]=r[P2]>>
cb60: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66  r[P1].**.** Shif
cb70: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
cb80: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cb90: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
cba0: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
cbb0: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
cbc0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
cbd0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
cbe0: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
cbf0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
cc00: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
cc10: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
cc20: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
cc30: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
cc40: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
cc50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cc60: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
cc70: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cc80: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
ccb0: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
ccc0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
ccd0: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
cce0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ccf0: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
cd00: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cd10: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
cd20: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
cd30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
cd40: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
cd50: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41  out3 */.  i64 iA
cd60: 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36  ;.  u64 uA;.  i6
cd70: 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a  4 iB;.  u8 op;..
cd80: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
cd90: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
cda0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
cdb0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
cdc0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
cdd0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
cde0: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
cdf0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
ce00: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
ce10: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
ce20: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20  break;.  }.  iA 
ce30: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
ce40: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69  Value(pIn2);.  i
ce50: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  B = sqlite3VdbeI
ce60: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
ce70: 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   op = pOp->opcod
ce80: 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  e;.  if( op==OP_
ce90: 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41  BitAnd ){.    iA
cea0: 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   &= iB;.  }else 
ceb0: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72  if( op==OP_BitOr
cec0: 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42   ){.    iA |= iB
ced0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42  ;.  }else if( iB
cee0: 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
cef0: 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52  t( op==OP_ShiftR
cf00: 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  ight || op==OP_S
cf10: 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20  hiftLeft );..   
cf20: 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20   /* If shifting 
cf30: 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d  by a negative am
cf40: 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74  ount, shift in t
cf50: 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69  he other directi
cf60: 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42  on */.    if( iB
cf70: 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  <0 ){.      asse
cf80: 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68  rt( OP_ShiftRigh
cf90: 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b  t==OP_ShiftLeft+
cfa0: 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20  1 );.      op = 
cfb0: 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b  2*OP_ShiftLeft +
cfc0: 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69   1 - op;.      i
cfd0: 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d  B = iB>(-64) ? -
cfe0: 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a  iB : 64;.    }..
cff0: 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29      if( iB>=64 )
d000: 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41  {.      iA = (iA
d010: 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  >=0 || op==OP_Sh
d020: 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d  iftLeft) ? 0 : -
d030: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
d040: 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20      memcpy(&uA, 
d050: 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29  &iA, sizeof(uA))
d060: 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d  ;.      if( op==
d070: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a  OP_ShiftLeft ){.
d080: 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69          uA <<= i
d090: 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  B;.      }else{.
d0a0: 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69          uA >>= i
d0b0: 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69  B;.        /* Si
d0c0: 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72  gn-extend on a r
d0d0: 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20  ight shift of a 
d0e0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
d0f0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  */.        if( i
d100: 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28  A<0 ) uA |= ((((
d110: 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c  u64)0xffffffff)<
d120: 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29  <32)|0xffffffff)
d130: 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20   << (64-iB);.   
d140: 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70     }.      memcp
d150: 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65  y(&iA, &uA, size
d160: 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20  of(iA));.    }. 
d170: 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
d180: 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70   iA;.  MemSetTyp
d190: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
d1a0: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
d1b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
d1c0: 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a  Imm  P1 P2 * * *
d1d0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d1e0: 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a  [P1]=r[P1]+P2.**
d1f0: 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e   .** Add the con
d200: 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20  stant P2 to the 
d210: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d220: 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73  r P1..** The res
d230: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e  ult is always an
d240: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
d250: 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67  To force any reg
d260: 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69  ister to be an i
d270: 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64  nteger, just add
d280: 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41   0..*/.case OP_A
d290: 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20  ddImm: {        
d2a0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
d2b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d2c0: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
d2d0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
d2e0: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
d2f0: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
d300: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
d310: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
d320: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d330: 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50  ode: MustBeInt P
d340: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
d350: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
d360: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d370: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d380: 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  r.  If the value
d390: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74  .** in P1 is not
d3a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
d3b0: 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
d3c0: 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
d3d0: 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64  ger.** without d
d3e0: 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a  ata loss, then j
d3f0: 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
d400: 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d  to P2, or if P2=
d410: 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53  =0.** raise an S
d420: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65  QLITE_MISMATCH e
d430: 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  xception..*/.cas
d440: 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20  e OP_MustBeInt: 
d450: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
d460: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
d470: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d480: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
d490: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d4a0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  nt)==0 ){.    ap
d4b0: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
d4c0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
d4d0: 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
d4e0: 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
d4f0: 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67  aken((pIn1->flag
d500: 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32  s&MEM_Int)==0, 2
d510: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
d520: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d530: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  t)==0 ){.      i
d540: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
d550: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
d560: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
d570: 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
d580: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
d590: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
d5a0: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
d5b0: 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  2 - 1;.        b
d5c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
d5d0: 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74    }.  }.  MemSet
d5e0: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
d5f0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
d600: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
d610: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
d620: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
d630: 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20  e: RealAffinity 
d640: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
d650: 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
d660: 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
d670: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
d680: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a   real value..**.
d690: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
d6a0: 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72  s used when extr
d6b0: 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  acting informati
d6c0: 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  on from a column
d6d0: 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41   that.** has REA
d6e0: 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63  L affinity.  Suc
d6f0: 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  h column values 
d700: 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f  may still be sto
d710: 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65  red as.** intege
d720: 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66  rs, for space ef
d730: 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66  ficiency, but af
d740: 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77  ter extraction w
d750: 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74  e want them.** t
d760: 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65  o have only a re
d770: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  al value..*/.cas
d780: 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74  e OP_RealAffinit
d790: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
d7a0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
d7b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d7c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
d7d0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d7e0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
d7f0: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
d800: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
d810: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
d820: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d830: 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f  MIT_CAST./* Opco
d840: 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20  de: ToText P1 * 
d850: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
d860: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d870: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d880: 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65   text..** If the
d890: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
d8a0: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
d8b0: 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20   a string using 
d8c0: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
d8d0: 74 20 6f 66 20 73 70 72 69 6e 74 66 28 29 2e 20  t of sprintf(). 
d8e0: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
d8f0: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
d900: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
d910: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
d920: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
d930: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d940: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d950: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d960: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d970: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
d980: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
d990: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d9a0: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
d9b0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d9c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d9d0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d9e0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
d9f0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
da00: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
da10: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
da20: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
da30: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
da40: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
da50: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
da60: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
da70: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
da80: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
da90: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
daa0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
dab0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
dac0: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
dad0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
dae0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
daf0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
db00: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
db10: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
db20: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
db30: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
db40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
db50: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
db60: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
db70: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
db80: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
db90: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
dba0: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
dbb0: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
dbc0: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
dbd0: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
dbe0: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
dbf0: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
dc00: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
dc10: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
dc20: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
dc30: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
dc40: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
dc50: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
dc60: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
dc70: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
dca0: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
dcb0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
dcc0: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
dcd0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
dce0: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
dcf0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
dd00: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
dd10: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
dd20: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
dd30: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
dd40: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
dd50: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
dd60: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
dd70: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
dd80: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
dd90: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
dda0: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
ddb0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
ddc0: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
ddd0: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
dde0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
ddf0: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
de00: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
de10: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
de20: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
de30: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
de40: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
de50: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
de60: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
de70: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
de80: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
de90: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
dea0: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
deb0: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
dec0: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
ded0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
dee0: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
def0: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
df00: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
df10: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
df20: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
df30: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
df40: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
df50: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
df60: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
df70: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
df80: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
df90: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dfa0: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
dfb0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
dfc0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
dfd0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
dfe0: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
dff0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
e000: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
e010: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
e020: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
e030: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
e040: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e050: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
e060: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
e070: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
e080: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
e090: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
e0a0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
e0b0: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
e0c0: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
e0d0: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
e0e0: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
e0f0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
e100: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
e110: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
e120: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
e130: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
e140: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
e150: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
e160: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
e170: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
e180: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
e190: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e1b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
e1c0: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  NT, in1 */.  pIn
e1d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e1e0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e1f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e200: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
e210: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
e220: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
e230: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
e240: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
e250: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
e260: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
e270: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
e280: 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  NT)./* Opcode: T
e290: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
e2a0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
e2b0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e2c0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
e2d0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
e2e0: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
e2f0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
e300: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
e310: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
e320: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
e330: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
e340: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
e350: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
e360: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
e370: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
e380: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
e390: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
e3a0: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
e3b0: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
e3c0: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
e3d0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
e3e0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
e3f0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
e400: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
e410: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e420: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
e430: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e440: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e450: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
e460: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
e470: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e480: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
e490: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e4a0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
e4b0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e4c0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
e4d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
e4e0: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
e4f0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
e500: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a  LOATING_POINT) *
e510: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
e520: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e530: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e540: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
e550: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
e560: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
e570: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
e580: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
e590: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e5a0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e5b0: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
e5c0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
e5d0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
e5e0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
e5f0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
e600: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
e610: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
e620: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
e630: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
e640: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
e650: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
e660: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e670: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
e680: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
e690: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
e6a0: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
e6b0: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
e6c0: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
e6d0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
e6e0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
e6f0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
e700: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
e710: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
e720: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
e730: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
e740: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
e750: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
e760: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
e770: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
e780: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
e790: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
e7a0: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
e7b0: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
e7c0: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
e7d0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
e7e0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e7f0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
e800: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
e810: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
e820: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
e830: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
e840: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
e850: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
e860: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
e870: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
e880: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
e890: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
e8a0: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
e8b0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
e8c0: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
e8d0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
e8e0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
e8f0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
e900: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
e910: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
e920: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e930: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e940: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e950: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e960: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e970: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e980: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e990: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e9a0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e9b0: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e9c0: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e9d0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e9e0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e9f0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
ea00: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
ea10: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
ea20: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
ea30: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
ea40: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
ea50: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
ea60: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
ea70: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
ea80: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
ea90: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
eaa0: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
eab0: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
eac0: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
ead0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
eae0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
eaf0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
eb00: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
eb10: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
eb20: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
eb30: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
eb40: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
eb50: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
eb60: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
eb70: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
eb80: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
eb90: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
eba0: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
ebb0: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
ebc0: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
ebd0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
ebe0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
ebf0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
ec00: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
ec10: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
ec20: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
ec30: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
ec40: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
ec50: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
ec60: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
ec70: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
ec80: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
ec90: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
eca0: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
ecb0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
ecc0: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
ecd0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
ece0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
ecf0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
ed00: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
ed10: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
ed20: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
ed30: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
ed40: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
ed50: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ed60: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
ed70: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
ed80: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
ed90: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
eda0: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
edb0: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
edc0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
edd0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
ede0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
edf0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
ee00: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
ee10: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
ee20: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
ee30: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
ee40: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ee50: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
ee60: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
ee70: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
ee80: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
ee90: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
eea0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
eeb0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
eec0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
eed0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
eee0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
eef0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ef00: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ef10: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
ef20: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
ef30: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
ef40: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
ef50: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
ef60: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
ef70: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
ef80: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
ef90: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
efa0: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
efb0: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
efc0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
efd0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
efe0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
eff0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f000: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
f010: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
f020: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
f030: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
f040: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
f050: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
f060: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
f070: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
f080: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
f090: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
f0a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
f0b0: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
f0c0: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
f0d0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
f0e0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
f0f0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
f100: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
f110: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
f120: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
f130: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
f140: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
f150: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f160: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f170: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f180: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f190: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
f1a0: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
f1b0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f1c0: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
f1d0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
f1e0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f1f0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f200: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f210: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f220: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
f230: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
f240: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
f250: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f260: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f270: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f280: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f290: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f2a0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
f2b0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f2c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
f2d0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
f2e0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
f2f0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
f300: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
f310: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
f320: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
f330: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
f340: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
f350: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
f360: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f370: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f380: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f390: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f3a0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f3b0: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
f3c0: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
f3d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f3e0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
f3f0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
f400: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
f410: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
f420: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
f430: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f450: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
f460: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f470: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
f480: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f490: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
f4a0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f4b0: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
f4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f4d0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
f4e0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
f4f0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
f500: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f510: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
f520: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
f530: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
f540: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
f550: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
f560: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
f570: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
f580: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
f590: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
f5a0: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
f5b0: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
f5c0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
f5d0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
f5e0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
f5f0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
f600: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f610: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f620: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
f630: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
f640: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
f650: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
f660: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
f670: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
f680: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
f690: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
f6a0: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
f6b0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
f6c0: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
f6d0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
f6e0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
f6f0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
f700: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
f710: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
f720: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
f730: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
f740: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
f750: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
f760: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
f770: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
f780: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
f790: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
f7a0: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
f7b0: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
f7c0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f7d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
f7e0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
f7f0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
f800: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
f810: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
f820: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
f830: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
f840: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f850: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
f860: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
f870: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
f880: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
f890: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
f8a0: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f8b0: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
f8c0: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
f8d0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
f8e0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
f8f0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
f900: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
f910: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
f920: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f930: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f940: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f950: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f960: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f970: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f980: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f990: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f9a0: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f9b0: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f9c0: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f9d0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f9e0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f9f0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
fa00: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
fa10: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
fa20: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
fa30: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
fa40: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fa50: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
fa60: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
fa70: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fa80: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
fa90: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
faa0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
fab0: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
fac0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
fad0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
fae0: 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20  .          pc = 
faf0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
fb00: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
fb10: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
fb20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
fb30: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
fb40: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
fb50: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
fb60: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
fb70: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
fb80: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
fb90: 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  affinity ){.    
fba0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
fbb0: 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn1, affinity, 
fbc0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
fbd0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
fbe0: 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  In3, affinity, e
fbf0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
fc00: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
fc10: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
fc20: 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61  em;.    }..    a
fc30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
fc40: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
fc50: 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
fc60: 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  =0 );.    Expand
fc70: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20  Blob(pIn1);.    
fc80: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
fc90: 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
fca0: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
fcb0: 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
fcc0: 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20  4.pColl);.  }.  
fcd0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
fce0: 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ode ){.    case 
fcf0: 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20  OP_Eq:    res = 
fd00: 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61  res==0;     brea
fd10: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e  k;.    case OP_N
fd20: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21  e:    res = res!
fd30: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
fd40: 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20     case OP_Lt:  
fd50: 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20    res = res<0;  
fd60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
fd70: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65  ase OP_Le:    re
fd80: 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20  s = res<=0;     
fd90: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
fda0: 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Gt:    res = 
fdb0: 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61  res>0;      brea
fdc0: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
fdd0: 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e        res = res>
fde0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
fdf0: 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
fe00: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
fe10: 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d  P2 ){.    pOut =
fe20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
fe30: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
fe40: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
fe50: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fe60: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
fe70: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
fe80: 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49   = res;.    REGI
fe90: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fea0: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  p2, pOut);.  }el
feb0: 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
fec0: 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20  chTaken(res!=0, 
fed0: 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
fee0: 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a  E_NULLEQ)?2:3);.
fef0: 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
ff00: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
ff10: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  2-1;.    }.  }. 
ff20: 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
ff30: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
ff40: 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
ff50: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
ff60: 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e  ers. */.  pIn1->
ff70: 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66  flags = (pIn1->f
ff80: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
ff90: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45  sk) | (flags1&ME
ffa0: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70  M_TypeMask);.  p
ffb0: 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In3->flags = (pI
ffc0: 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n3->flags&~MEM_T
ffd0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
ffe0: 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s3&MEM_TypeMask)
fff0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
10000 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
10010 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
10020 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
10030 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
10040 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
10050 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
10060 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
10070 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
10080 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
10090 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
100a0 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
100b0 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68  xt OP_Compare th
100c0 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50  at has.** the OP
100d0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
100e0 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69   set in P5. Typi
100f0 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
10100 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
10110 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69  .** occur immedi
10120 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
10130 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
10140 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
10150 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
10160 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
10170 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
10180 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10190 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
101a0 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
101b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
101c0 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
101d0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
101e0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40   Synopsis: r[P1@
101f0 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d  P3] <-> r[P2@P3]
10200 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
10210 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
10220 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
10230 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
10240 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
10250 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
10260 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
10270 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
10280 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
10290 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
102a0 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
102b0 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
102c0 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
102d0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
102e0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
102f0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
10300 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69  order of compari
10310 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d  son is.** determ
10320 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  ined by the most
10330 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75   recent OP_Permu
10340 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  tation operator.
10350 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c    If the.** OPFL
10360 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69  AG_PERMUTE bit i
10370 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
10380 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61  gister are compa
10390 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61  red in sequentia
103a0 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  l.** order..**.*
103b0 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
103c0 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
103d0 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
103e0 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
103f0 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
10400 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
10410 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
10420 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
10430 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
10440 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
10450 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
10460 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
10470 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
10480 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
10490 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
104a0 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
104b0 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
104c0 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
104d0 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
104e0 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
104f0 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
10500 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
10510 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
10520 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
10530 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
10540 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
10550 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
10560 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
10570 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
10580 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
10590 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
105a0 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
105b0 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
105c0 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
105d0 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
105e0 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
105f0 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
10600 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
10610 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d  MUTE)==0 ) aPerm
10620 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70  ute = 0;.  n = p
10630 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
10640 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
10650 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
10660 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
10670 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
10680 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10690 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
106a0 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
106b0 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
106c0 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
106d0 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
106e0 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
106f0 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
10700 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
10710 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
10720 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
10730 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
10740 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
10750 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
10760 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
10770 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10780 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10790 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
107a0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
107b0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
107c0 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
107d0 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
107e0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
107f0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
10800 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
10810 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
10820 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
10830 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
10840 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
10850 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
10860 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
10870 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
10880 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
10890 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
108a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
108b0 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
108c0 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
108d0 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
108e0 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
108f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
10900 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
10910 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
10920 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
10930 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
10940 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
10950 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
10960 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
10970 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
10980 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
10990 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
109a0 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
109b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
109c0 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
109d0 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
109e0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
109f0 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
10a00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
10a10 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
10a20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
10a30 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
10a40 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
10a50 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
10a60 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10a70 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
10a80 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
10a90 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
10aa0 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
10ab0 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
10ac0 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
10ad0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
10ae0 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
10af0 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
10b00 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
10b10 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
10b20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
10b30 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
10b40 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64  pOp->p1 - 1;  Vd
10b50 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
10b60 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  3);.  }else if( 
10b70 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
10b80 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
10b90 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
10ba0 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65  Taken(1,3);.  }e
10bb0 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
10bc0 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64 62 65  p->p3 - 1;  Vdbe
10bd0 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
10be0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10bf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
10c00 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
10c10 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
10c20 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
10c30 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
10c40 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
10c50 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
10c60 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
10c70 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
10c80 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
10c90 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
10ca0 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
10cb0 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
10cc0 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
10cd0 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
10ce0 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
10cf0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
10d00 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
10d10 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
10d20 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
10d30 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
10d40 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
10d50 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
10d60 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
10d70 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
10d80 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
10d90 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
10da0 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
10db0 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
10dc0 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
10dd0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
10de0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
10df0 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
10e00 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
10e10 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
10e20 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
10e30 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
10e40 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
10e50 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
10e60 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
10e70 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
10e80 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
10e90 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10ea0 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
10eb0 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
10ec0 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
10ed0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10ee0 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
10ef0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
10f00 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
10f10 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
10f20 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
10f30 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
10f40 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
10f50 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
10f60 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
10f70 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
10f80 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
10f90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10fa0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10fb0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10fc0 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
10fd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
10fe0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
10ff0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
11000 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
11010 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
11020 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
11030 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
11040 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
11050 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
11060 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
11070 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
11080 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
11090 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
110a0 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
110b0 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
110c0 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
110d0 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
110e0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
110f0 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
11100 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
11110 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
11120 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
11130 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
11140 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
11150 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
11160 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
11170 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
11180 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11190 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
111a0 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
111b0 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
111c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
111d0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
111e0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
111f0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
11200 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11210 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11220 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11230 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
11240 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
11250 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
11260 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11270 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
11280 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
11290 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
112a0 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
112b0 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
112c0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
112d0 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
112e0 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
112f0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
11300 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11320 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
11330 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
11340 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11350 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
11360 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11370 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
11380 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
11390 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
113a0 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
113b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
113c0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
113d0 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69  nt64(pOut, !sqli
113e0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
113f0 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
11400 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11410 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
11420 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11430 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d  s: r[P1]= ~r[P1]
11440 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
11450 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
11460 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
11470 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
11480 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
11490 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
114a0 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
114b0 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
114c0 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
114d0 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
114e0 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
114f0 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
11500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
11510 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
11520 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
11530 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11540 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
11550 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
11560 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
11570 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11580 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
11590 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
115a0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
115b0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
115c0 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c  Int64(pOut, ~sql
115d0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
115e0 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
115f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11600 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
11610 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
11620 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67   the "once" flag
11630 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69   number P1. If i
11640 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74  t is set, jump t
11650 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
11660 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  . .** Otherwise,
11670 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e   set the flag an
11680 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
11690 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
116a0 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74  uction..** In ot
116b0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20  her words, this 
116c0 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c  opcode causes al
116d0 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f  l following opco
116e0 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50  des up through P
116f0 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e  2.** (but not in
11700 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72  cluding P2) to r
11710 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64  un just once and
11720 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f   to be skipped o
11730 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  n subsequent.** 
11740 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68  times through th
11750 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c  e loop..**.** Al
11760 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61  l "once" flags a
11770 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65  re initially cle
11780 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20  ared whenever a 
11790 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
117a0 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69  nt.** first begi
117b0 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61  ns to run..*/.ca
117c0 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
117d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
117e0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
117f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
11800 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61  lag );.  VdbeBra
11810 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63  nchTaken(p->aOnc
11820 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d  eFlag[pOp->p1]!=
11830 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e  0, 2);.  if( p->
11840 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11850 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  1] ){.    pc = p
11860 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
11870 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
11880 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
11890 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
118a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
118b0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
118c0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
118d0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
118e0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
118f0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
11900 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
11910 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
11920 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
11930 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
11940 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
11950 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
11960 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
11970 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
11980 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
11990 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
119a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
119b0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
119c0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
119d0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
119e0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
119f0 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
11a00 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
11a10 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
11a20 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
11a30 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
11a40 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
11a50 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
11a60 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
11a70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
11aa0 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
11ab0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
11ac0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
11ad0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
11ae0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11af0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
11b00 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
11b10 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
11b20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
11b30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
11b40 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
11b50 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
11b60 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
11b70 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
11b80 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
11b90 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
11ba0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
11bb0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
11bc0 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
11bd0 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
11be0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
11bf0 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63   if( c ){.    pc
11c00 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
11c10 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11c20 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
11c30 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
11c40 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
11c50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
11c60 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11c70 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11c80 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11c90 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
11ca0 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
11cb0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11cc0 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
11cd0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
11ce0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11cf0 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
11d00 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
11d10 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
11d20 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
11d30 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11d40 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
11d50 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
11d60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11d70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11d80 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
11d90 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
11da0 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
11db0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11dc0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11dd0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11de0 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
11df0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
11e00 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
11e10 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11e20 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
11e30 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
11e40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11e50 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11e60 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
11e70 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
11e80 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11e90 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11ea0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
11eb0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
11ec0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11ed0 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
11ee0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
11ef0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
11f00 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
11f10 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
11f20 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
11f30 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
11f40 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
11f50 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
11f60 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
11f70 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
11f80 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
11f90 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
11fa0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11fb0 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
11fc0 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
11fd0 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
11fe0 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
11ff0 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
12000 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
12010 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
12020 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
12030 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
12040 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
12050 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
12060 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
12070 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
12080 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
12090 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
120a0 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
120b0 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
120c0 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
120d0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
120e0 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
120f0 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
12100 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
12110 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
12120 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
12130 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
12140 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
12150 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
12160 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
12170 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
12180 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
12190 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
121a0 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
121b0 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
121c0 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
121d0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
121e0 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
121f0 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
12200 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
12210 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
12220 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
12230 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
12240 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
12250 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
12260 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
12270 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
12280 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
12290 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
122a0 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
122b0 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
122c0 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
122d0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
122e0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
122f0 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
12300 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
12310 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
12320 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
12330 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
12340 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
12350 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
12360 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
12370 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64   {.  i64 payload
12380 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
12390 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
123a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
123b0 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
123c0 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
123d0 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
123e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
123f0 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
12400 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
12410 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
12420 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
12430 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
12440 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
12450 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
12460 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
12470 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
12480 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
12490 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
124a0 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
124b0 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
124c0 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
124d0 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
124e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
124f0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
12500 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
12510 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
12520 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
12530 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
12540 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
12550 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
12560 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
12570 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
12580 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
12590 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
125a0 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
125b0 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
125c0 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
125d0 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
125e0 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
125f0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
12600 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
12610 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
12620 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
12630 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
12640 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
12650 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
12660 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
12670 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
12680 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
12690 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
126a0 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
126b0 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
126c0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
126d0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
126e0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
126f0 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76  ield */.  u32 av
12700 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ail;         /* 
12710 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
12720 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
12730 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20  a */.  u32 t;   
12740 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74            /* A t
12750 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  ype code from th
12760 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
12770 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20  */.  Mem *pReg; 
12780 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64          /* Pseud
12790 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67  oTable input reg
127a0 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d  ister */..  p2 =
127b0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
127c0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
127d0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
127e0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
127f0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
12800 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
12810 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
12820 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
12830 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
12840 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
12850 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
12860 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
12870 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
12880 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
12890 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
128a0 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54    aType = pC->aT
128b0 79 70 65 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d  ype;.  aOffset =
128c0 20 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e 46 69   aType + pC->nFi
128d0 65 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  eld;.#ifndef SQL
128e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
128f0 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20  TABLE.  assert( 
12900 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d  pC->pVtabCursor=
12910 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75  =0 ); /* OP_Colu
12920 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20  mn never called 
12930 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  on virtual table
12940 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72   */.#endif.  pCr
12950 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
12960 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
12970 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75  r!=0 || pC->pseu
12980 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20  doTableReg>0 ); 
12990 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e  /* pCrsr NULL on
129a0 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f   PseudoTables */
129b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
129c0 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  !=0 || pC->nullR
129d0 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f  ow );          /
129e0 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e  * pC->nullRow on
129f0 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f   PseudoTables */
12a00 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  ..  /* If the cu
12a10 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74  rsor cache is st
12a20 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70  ale, bring it up
12a30 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63  -to-date */.  rc
12a40 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
12a50 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
12a60 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
12a70 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
12a80 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  or;.  if( pC->ca
12a90 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
12aa0 63 68 65 43 74 72 20 7c 7c 20 28 70 4f 70 2d 3e  cheCtr || (pOp->
12ab0 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  p5&OPFLAG_CLEARC
12ac0 41 43 48 45 29 21 3d 30 20 29 7b 0a 20 20 20 20  ACHE)!=0 ){.    
12ad0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
12ae0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72  ){.      if( pCr
12af0 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  sr==0 ){.       
12b00 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
12b10 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
12b20 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
12b30 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
12b40 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20  TableReg];.     
12b50 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
12b60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
12b70 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
12b80 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
12b90 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
12ba0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12bb0 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61   = pC->szRow = a
12bc0 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  vail = pReg->n;.
12bd0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
12be0 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
12bf0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12c00 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
12c10 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
12c20 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 67  Null);.        g
12c30 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
12c40 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
12c50 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
12c60 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
12c70 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
12c80 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  le==0 ){.       
12c90 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
12ca0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
12cb0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
12cc0 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
12cd0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
12ce0 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
12cf0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a  payloadSize64);.
12d00 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12d10 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
12d20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
12d30 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
12d40 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
12d50 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
12d60 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c  te3BtreeParseCel
12d70 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56  lPtr() uses getV
12d80 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74  arint32() to ext
12d90 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20  ract the.       
12da0 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65   ** payload size
12db0 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73  , so it is impos
12dc0 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61  sible for payloa
12dd0 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20  dSize64 to be.  
12de0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
12df0 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
12e00 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12e10 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20   (payloadSize64 
12e20 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  & SQLITE_MAX_U32
12e30 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53  )==(u64)payloadS
12e40 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20  ize64 );.       
12e50 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
12e60 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
12e70 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12e80 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
12e90 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
12ea0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
12eb0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12ec0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
12ed0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
12ee0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
12ef0 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
12f00 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
12f10 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
12f20 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53  r, &pC->payloadS
12f30 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ize);.        as
12f40 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
12f50 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
12f60 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
12f70 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43  il */.        pC
12f80 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
12f90 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
12fa0 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
12fb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
12fc0 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33  ert( avail<=6553
12fd0 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d  6 );  /* Maximum
12fe0 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34   page size is 64
12ff0 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  KiB */.      if(
13000 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13010 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29   <= (u32)avail )
13020 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
13030 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  Row = pC->payloa
13040 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c  dSize;.      }el
13050 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  se{.        pC->
13060 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20  szRow = avail;. 
13070 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
13080 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13090 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   > (u32)db->aLim
130a0 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
130b0 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
130c0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
130d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
130e0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
130f0 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72  us = p->cacheCtr
13100 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66  ;.    pC->iHdrOf
13110 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74  fset = getVarint
13120 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66  32(pC->aRow, off
13130 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48  set);.    pC->nH
13140 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20  drParsed = 0;.  
13150 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f    aOffset[0] = o
13160 66 66 73 65 74 3b 0a 20 20 20 20 69 66 28 20 61  ffset;.    if( a
13170 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20  vail<offset ){. 
13180 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
13190 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
131a0 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
131b0 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
131c0 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
131d0 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
131e0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
131f0 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
13200 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
13210 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
13220 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
13230 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
13240 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
13250 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
13260 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
13270 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
13280 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
13290 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
132a0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
132b0 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  0;.    }..    /*
132c0 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
132d0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
132e0 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
132f0 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
13300 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
13310 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
13320 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
13330 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
13340 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
13350 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
13360 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
13370 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
13380 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
13390 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
133a0 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
133b0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
133c0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
133d0 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
133e0 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
133f0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
13400 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
13410 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
13420 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
13430 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
13440 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
13450 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
13460 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
13470 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
13480 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
13490 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
134a0 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
134b0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
134c0 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
134d0 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
134e0 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
134f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
13500 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
13510 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13520 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
13530 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
13540 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69   at least the fi
13550 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73  rst p2+1 entries
13560 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68   of the header h
13570 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61  ave been.  ** pa
13580 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69  rsed and valid i
13590 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e  nformation is in
135a0 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 61   aOffset[] and a
135b0 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
135c0 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
135d0 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
135e0 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
135f0 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
13600 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
13610 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
13620 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
13630 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
13640 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
13650 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
13660 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d .    */.    if
13670 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
13680 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
13690 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
136a0 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
136b0 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
136c0 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
136d0 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
136e0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
136f0 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
13700 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
13710 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
13720 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
13730 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
13740 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61  tree(pCrsr, 0, a
13750 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20  Offset[0], .    
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
13790 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
137a0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
137b0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
137c0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
137d0 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
137e0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
137f0 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
13800 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
13810 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
13820 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13830 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 61 54     /* Fill in aT
13840 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73  ype[i] and aOffs
13850 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72  et[i] values thr
13860 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66  ough the p2-th f
13870 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ield. */.      i
13880 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65   = pC->nHdrParse
13890 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20  d;.      offset 
138a0 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20  = aOffset[i];.  
138b0 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61      zHdr = zData
138c0 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65   + pC->iHdrOffse
138d0 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72  t;.      zEndHdr
138e0 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73   = zData + aOffs
138f0 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73  et[0];.      ass
13900 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ert( i<=p2 && zH
13910 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
13920 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
13930 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30  if( zHdr[0]<0x80
13940 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20   ){.          t 
13950 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20  = zHdr[0];.     
13960 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20       zHdr++;.   
13970 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13980 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71        zHdr += sq
13990 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
139a0 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20  (zHdr, &t);.    
139b0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54      }.        aT
139c0 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20  ype[i] = t;.    
139d0 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71      szField = sq
139e0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
139f0 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
13a00 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46     offset += szF
13a10 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66  ield;.        if
13a20 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64  ( offset<szField
13a30 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20   ){  /* True if 
13a40 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73  offset overflows
13a50 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48   */.          zH
13a60 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d  dr = &zEndHdr[1]
13a70 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c  ;  /* Forces SQL
13a80 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75  ITE_CORRUPT retu
13a90 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20  rn below */.    
13aa0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
13ab0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
13ac0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66  ++;.        aOff
13ad0 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b  set[i] = offset;
13ae0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69  .      }while( i
13af0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
13b00 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43  dHdr );.      pC
13b10 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
13b20 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
13b30 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
13b40 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
13b50 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
13b60 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
13b70 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
13b80 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
13b90 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20       sMem.flags 
13ba0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
13bb0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
13bc0 49 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20  If we have read 
13bd0 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61  more header data
13be0 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69   than was contai
13bf0 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65  ned in the heade
13c00 72 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 69  r,.      ** or i
13c10 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  f the end of the
13c20 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65   last field appe
13c30 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74  ars to be past t
13c40 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20  he end of the.  
13c50 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
13c60 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
13c70 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
13c80 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
13c90 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
13ca0 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
13cb0 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
13cc0 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
13cd0 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
13ce0 61 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a 2a 20  aling .      ** 
13cf0 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64  with a corrupt d
13d00 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a  atabase..      *
13d10 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
13d20 72 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20 20 20  r > zEndHdr).   
13d30 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e      || (offset >
13d40 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13d50 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a 48 64  ).       || (zHd
13d60 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66  r==zEndHdr && of
13d70 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61  fset!=pC->payloa
13d80 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
13d90 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
13da0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
13db0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
13dc0 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
13dd0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
13de0 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
13df0 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e  rying to extra n
13e00 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ew entries from 
13e10 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72  the header, nHdr
13e20 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a  Parsed is.    **
13e30 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f   still not up to
13e40 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20   p2, that means 
13e50 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
13e60 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70  has fewer than p
13e70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  2.    ** columns
13e80 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74  .  So the result
13e90 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
13ea0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
13eb0 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  e or a NULL..   
13ec0 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
13ed0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
13ee0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
13ef0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
13f00 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
13f10 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
13f20 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
13f30 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
13f40 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  atic);.      }el
13f50 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  se{.        MemS
13f60 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
13f70 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
13f80 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
13f90 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
13fa0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45     }.  }..  /* E
13fb0 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65  xtract the conte
13fc0 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d  nt for the p2+1-
13fd0 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74  th column.  Cont
13fe0 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a  rol can only.  *
13ff0 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  * reach this poi
14000 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32  nt if aOffset[p2
14010 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  ], aOffset[p2+1]
14020 2c 20 61 6e 64 20 61 54 79 70 65 5b 70 32 5d 20  , and aType[p2] 
14030 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
14040 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
14050 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
14060 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
14070 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
14080 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
14090 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
140a0 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
140b0 29 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73  ) );.  if( pC->s
140c0 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32  zRow>=aOffset[p2
140d0 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  +1] ){.    /* Th
140e0 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e  is is the common
140f0 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
14100 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20  desired content 
14110 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67  fits on the orig
14120 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65  inal.    ** page
14130 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e   - where the con
14140 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61  tent is not on a
14150 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  n overflow page 
14160 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  */.    VdbeMemRe
14170 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20  lease(pDest);.  
14180 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
14190 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b  ialGet(pC->aRow+
141a0 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 54 79  aOffset[p2], aTy
141b0 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
141c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
141d0 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
141e0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
141f0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
14200 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
14210 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b    t = aType[p2];
14220 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e  .    if( ((pOp->
14230 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e  p5 & (OPFLAG_LEN
14240 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59  GTHARG|OPFLAG_TY
14250 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20  PEOFARG))!=0.   
14260 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31         && ((t>=1
14270 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c  2 && (t&1)==0) |
14280 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
14290 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d  LAG_TYPEOFARG)!=
142a0 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e  0)).     || (len
142b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
142c0 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d  rialTypeLen(t))=
142d0 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
142e0 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72  /* Content is ir
142f0 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 65  relevant for the
14300 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
14310 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20 20  on and for.     
14320 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68 28 58   ** the length(X
14330 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
14340 69 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f 20 77  is a blob.  So w
14350 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
14360 75 73 65 0a 20 20 20 20 20 20 2a 2a 20 62 6f 67  use.      ** bog
14370 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65  us content rathe
14380 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 20 63  r than reading c
14390 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b  ontent from disk
143a0 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a 20 20  .  NULL works.  
143b0 20 20 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20      ** for text 
143c0 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61  and blob and wha
143d0 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
143e0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
143f0 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20  riable.      ** 
14400 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
14410 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 20  erything else.  
14420 43 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73 6f 20  Content is also 
14430 69 72 72 65 6c 65 76 61 6e 74 20 69 66 0a 20 20  irrelevant if.  
14440 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e 74 65      ** the conte
14450 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 30 2e 20  nt length is 0. 
14460 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
14470 20 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29 26 70   t<=13 ? (u8*)&p
14480 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30  ayloadSize64 : 0
14490 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a 4d 61  ;.      sMem.zMa
144a0 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65  lloc = 0;.    }e
144b0 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65  lse{.      memse
144c0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
144d0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
144e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
144f0 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74  ove(&sMem, pDest
14500 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
14510 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
14520 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66  Btree(pCrsr, aOf
14530 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21  fset[p2], len, !
14540 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20  pC->isTable,.   
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
14580 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
14590 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
145a0 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
145b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
145c0 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d  Data = (u8*)sMem
145d0 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  .z;.    }.    sq
145e0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
145f0 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65  et(zData, t, pDe
14600 73 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 77  st);.    /* If w
14610 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
14620 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
14630 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
14640 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 71  in the.    ** sq
14650 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
14660 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f  Btree() call abo
14670 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65  ve) then transfe
14680 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61  r control of tha
14690 74 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63  t.    ** dynamic
146a0 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
146b0 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65  pace over to the
146c0 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65   pDest structure
146d0 2e 0a 20 20 20 20 2a 2a 20 54 68 69 73 20 70 72  ..    ** This pr
146e0 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20  events a memory 
146f0 63 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69 66 28  copy. */.    if(
14700 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b   sMem.zMalloc ){
14710 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
14720 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c  Mem.z==sMem.zMal
14730 6c 6f 63 20 29 3b 0a 20 20 20 20 20 20 61 73 73  loc );.      ass
14740 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
14750 6d 69 63 28 70 44 65 73 74 29 3d 3d 30 20 29 3b  mic(pDest)==0 );
14760 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
14770 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28  pDest->flags & (
14780 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
14790 29 29 3d 3d 30 20 7c 7c 20 70 44 65 73 74 2d 3e  ))==0 || pDest->
147a0 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20  z==sMem.z );.   
147b0 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
147c0 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
147d0 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
147e0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
147f0 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
14800 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65    pDest->z = sMe
14810 6d 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m.z;.      pDest
14820 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
14830 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 7d 0a  .zMalloc;.    }.
14840 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63    }.  pDest->enc
14850 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70   = encoding;..op
14860 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 44  _column_out:.  D
14870 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44  eephemeralize(pD
14880 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  est);.op_column_
14890 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f  error:.  UPDATE_
148a0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
148b0 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
148c0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
148d0 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
148e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
148f0 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
14900 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
14910 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50   affinity(r[P1@P
14920 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  2]).**.** Apply 
14930 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
14940 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
14950 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
14960 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
14970 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
14980 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
14990 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
149a0 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
149b0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
149c0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
149d0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
149e0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
149f0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
14a00 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
14a10 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
14a20 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
14a30 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
14a40 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
14a50 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
14a60 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72  pplied */.  char
14a70 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20   cAff;          
14a80 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65       /* A single
14a90 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66   character of af
14aa0 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66  finity */..  zAf
14ab0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
14ac0 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
14ad0 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
14ae0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
14af0 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
14b00 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
14b10 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
14b20 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66  e( (cAff = *(zAf
14b30 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b  finity++))!=0 ){
14b40 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
14b50 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
14b60 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
14b70 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
14b80 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
14b90 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  n1) );.    apply
14ba0 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63  Affinity(pIn1, c
14bb0 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Aff, encoding);.
14bc0 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
14bd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14be0 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
14bf0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
14c00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
14c10 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32  3]=mkrec(r[P1@P2
14c20 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  ]).**.** Convert
14c30 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
14c40 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
14c50 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64  into the [record
14c60 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20   format].** use 
14c70 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
14c80 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
14c90 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
14ca0 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
14cb0 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
14cc0 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64  opcode can decod
14cd0 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74  e the record lat
14ce0 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  er..**.** P4 may
14cf0 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
14d00 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
14d10 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
14d20 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
14d30 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
14d40 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
14d50 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
14d60 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
14d70 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
14d80 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
14d90 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
14da0 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
14db0 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
14dc0 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
14dd0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
14de0 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
14df0 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
14e00 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
14e10 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
14e20 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
14e30 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e  the affinity NON
14e40 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  E..*/.case OP_Ma
14e50 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38  keRecord: {.  u8
14e60 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
14e70 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
14e80 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
14e90 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
14ea0 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
14eb0 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
14ec0 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
14ed0 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
14ee0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  a;             /
14ef0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14f00 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
14f10 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20  */.  int nHdr;  
14f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14f30 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
14f40 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
14f50 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
14f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
14f70 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
14f80 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
14f90 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  d */.  int nZero
14fa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14fb0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
14fc0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
14fd0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
14fe0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
14ff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15000 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
15010 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
15020 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
15030 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
15040 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
15050 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
15060 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
15070 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
15080 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
15090 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
150a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
150b0 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
150c0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
150d0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
150e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
150f0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
15100 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
15110 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
15120 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
15130 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
15140 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
15150 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
15160 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
15170 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
15180 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
151b0 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68  n zNewRecord[] h
151c0 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a  eader */.  int j
151d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
151e0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
151f0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
15200 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74  content */.  int
15210 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
15220 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
15230 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f   a field */..  /
15240 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
15250 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
15260 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
15270 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
15280 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
15290 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
152a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
152e0 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
152f0 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
15300 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
15310 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
15320 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
15330 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
15340 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15350 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15360 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15370 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15380 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
15390 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
153a0 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
153b0 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
153c0 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
153d0 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74    ** and so frot
153e0 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
153f0 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
15400 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
15410 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
15420 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
15430 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
15440 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
15450 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
15460 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
15470 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
15480 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
15490 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
154a0 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
154b0 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
154c0 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
154d0 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
154e0 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
154f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15500 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
15510 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d  pace */.  nHdr =
15520 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
15530 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
15540 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
15550 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20  */.  nZero = 0; 
15560 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15570 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15580 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15590 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46  e record */.  nF
155a0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ield = pOp->p1;.
155b0 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
155c0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
155d0 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70  t( nField>0 && p
155e0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
155f0 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e  >p2+nField<=(p->
15600 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
15610 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d  +1 );.  pData0 =
15620 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a   &aMem[nField];.
15630 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
15640 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  p2;.  pLast = &p
15650 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b  Data0[nField-1];
15660 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  .  file_format =
15670 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
15680 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64  Format;..  /* Id
15690 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75  entify the outpu
156a0 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20  t register */.  
156b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
156c0 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e  pOp->p1 || pOp->
156d0 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  p3>=pOp->p1+pOp-
156e0 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  >p2 );.  pOut = 
156f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
15700 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
15710 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
15720 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71  /* Apply the req
15730 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20  uested affinity 
15740 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  to all inputs.  
15750 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  */.  assert( pDa
15760 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
15770 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
15780 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74  .    pRec = pDat
15790 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20  a0;.    do{.    
157a0 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
157b0 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e  pRec++, *(zAffin
157c0 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67  ity++), encoding
157d0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
157e0 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30   zAffinity[0]==0
157f0 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20   || pRec<=pLast 
15800 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a  );.    }while( z
15810 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20  Affinity[0] );. 
15820 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68   }..  /* Loop th
15830 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
15840 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
15850 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
15860 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
15870 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
15880 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
15890 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
158a0 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20  ..  */.  pRec = 
158b0 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20  pLast;.  do{.   
158c0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
158d0 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
158e0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
158f0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15900 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
15910 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
15920 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
15930 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
15940 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
15950 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
15960 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
15970 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20    if( nData ){. 
15980 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
15990 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
159a0 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pRec);.      }el
159b0 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
159c0 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
159d0 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
159e0 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
159f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
15a00 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
15a10 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
15a20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
15a30 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
15a40 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
15a50 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
15a60 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
15a70 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
15a80 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
15a90 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65  _type);.  }while
15aa0 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74  ( (--pRec)>=pDat
15ab0 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 41 64 64 20  a0 );..  /* Add 
15ac0 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64  the initial head
15ad0 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f  er varint and to
15ae0 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a  tal the size */.
15af0 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
15b00 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
15b10 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
15b20 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
15b30 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
15b40 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
15b50 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
15b60 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
15b70 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
15b80 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
15b90 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
15ba0 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
15bb0 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
15bc0 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
15bd0 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
15be0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
15bf0 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
15c00 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
15c10 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
15c20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
15c30 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
15c40 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
15c50 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
15c60 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
15c70 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
15c80 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
15c90 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
15ca0 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
15cb0 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
15cc0 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
15cd0 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
15ce0 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
15cf0 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
15d00 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
15d10 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
15d20 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
15d30 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
15d40 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c  mGrow() could cl
15d50 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
15d60 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
15d70 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
15d80 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
15d90 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
15da0 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f  te, 0) ){.    go
15db0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
15dc0 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
15dd0 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
15de0 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
15df0 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
15e00 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
15e10 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20  ord, nHdr);.  j 
15e20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74  = nHdr;.  assert
15e30 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
15e40 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74  );.  pRec = pDat
15e50 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65  a0;.  do{.    se
15e60 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69  rial_type = sqli
15e70 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15e80 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  e(pRec, file_for
15e90 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70  mat);.    i += p
15ea0 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
15eb0 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
15ec0 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
15ed0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
15ee0 70 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  pe */.    j += s
15ef0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15f00 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
15f10 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
15f20 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
15f30 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
15f40 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
15f50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
15f60 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
15f70 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
15f80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
15f90 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
15fa0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15fb0 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
15fc0 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
15fd0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
15fe0 45 4d 5f 42 6c 6f 62 3b 0a 20 20 70 4f 75 74 2d  EM_Blob;.  pOut-
15ff0 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28  >xDel = 0;.  if(
16000 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
16010 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
16020 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
16030 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
16040 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
16050 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
16060 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
16070 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
16080 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
16090 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
160a0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
160b0 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
160c0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
160d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
160e0 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
160f0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
16100 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
16110 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
16120 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
16130 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
16140 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
16150 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
16160 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
16170 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
16180 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
16190 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
161a0 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
161b0 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
161c0 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
161d0 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
161e0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
161f0 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73   *pCrsr;..  pCrs
16200 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
16210 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a  ->p1]->pCursor;.
16220 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
16230 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  );.  nEntry = 0;
16240 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
16250 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
16260 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
16270 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
16280 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
16290 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
162a0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
162b0 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
162c0 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
162d0 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
162e0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
162f0 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
16300 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
16310 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
16320 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
16330 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
16340 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
16350 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
16360 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
16370 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
16380 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
16390 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
163a0 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
163b0 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
163c0 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
163d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
163e0 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
163f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16400 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
16410 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
16420 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
16430 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
16440 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
16450 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
16460 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
16470 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
16480 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
16490 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
164a0 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
164b0 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
164c0 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
164d0 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
164e0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
164f0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
16500 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
16510 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
16520 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
16530 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
16540 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
16550 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
16560 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
16570 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
16580 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
16590 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
165a0 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
165b0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
165c0 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
165d0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
165e0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
165f0 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
16600 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
16610 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
16620 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
16630 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
16640 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
16650 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
16660 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
16670 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
16680 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
16690 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
166a0 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
166b0 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
166c0 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
166d0 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
166e0 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
166f0 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
16700 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
16710 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
16720 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
16730 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
16740 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
16750 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16760 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
16770 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
16780 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
16790 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
167a0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
167b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
167c0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
167d0 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
167e0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
167f0 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
16800 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
16810 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
16820 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
16830 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
16840 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
16850 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
16860 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
16870 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
16880 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
16890 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
168a0 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
168b0 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
168c0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
168d0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
168e0 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
168f0 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
16900 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
16910 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
16920 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
16930 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
16940 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
16950 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
16960 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
16970 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
16980 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
16990 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
169c0 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
169d0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
169e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
169f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16a00 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
16a10 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
16a20 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
16a30 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
16a40 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
16a50 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
16a60 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
16a70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
16a80 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
16a90 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
16aa0 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
16ab0 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
16ac0 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
16ad0 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
16ae0 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
16af0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
16b00 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
16b10 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
16b20 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
16b30 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
16b40 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
16b50 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
16b60 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
16b70 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
16b80 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16b90 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
16ba0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16bb0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
16bc0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
16bd0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
16be0 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
16bf0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
16c00 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
16c10 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
16c20 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
16c30 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
16c40 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
16c50 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16c60 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
16c70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
16c80 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
16c90 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
16ca0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
16cb0 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
16cc0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
16cd0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16ce0 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
16cf0 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
16d00 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
16d10 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
16d20 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
16d30 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
16d40 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
16d50 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
16d60 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
16d70 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
16d80 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
16d90 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
16da0 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
16db0 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
16dc0 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
16dd0 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
16de0 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
16df0 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
16e00 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
16e10 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
16e20 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
16e30 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
16e40 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
16e50 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
16e60 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
16e70 72 72 4d 73 67 2c 20 64 62 2c 20 22 6e 6f 20 73  rrMsg, db, "no s
16e80 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
16e90 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
16ea0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
16eb0 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
16ec0 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16ed0 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50  e>0 && p1==SAVEP
16ee0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
16ef0 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
16f00 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
16f10 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
16f20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
16f30 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
16f40 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
16f50 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20  statements..    
16f60 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
16f70 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
16f80 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20  zErrMsg, db, .  
16f90 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 72 65        "cannot re
16fa0 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
16fb0 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
16fc0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 0a 20 20   in progress".  
16fd0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 63 20      );.      rc 
16fe0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
16ff0 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
17000 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
17010 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
17020 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17030 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
17040 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
17050 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
17060 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
17070 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
17080 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
17090 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
170a0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
170b0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
170c0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
170d0 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
170e0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
170f0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
17100 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
17110 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
17120 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
17130 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
17140 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
17150 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
17160 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
17170 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
17180 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
17190 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
171a0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
171b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
171c0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
171d0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
171e0 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20     p->pc = pc;. 
171f0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
17200 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
17210 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
17220 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
17230 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
17240 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
17250 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
17260 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17270 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
17280 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
17290 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
172a0 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
172b0 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
172c0 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
172d0 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
172e0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
172f0 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
17300 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
17310 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
17320 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
17330 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
17340 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
17350 62 5b 69 69 5d 2e 70 42 74 2c 20 53 51 4c 49 54  b[ii].pBt, SQLIT
17360 45 5f 41 42 4f 52 54 29 3b 0a 20 20 20 20 20 20  E_ABORT);.      
17370 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
17380 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
17390 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
173a0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
173b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
173c0 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
173d0 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
173e0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
173f0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
17400 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
17410 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
17420 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17430 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
17440 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
17450 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17460 52 4f 4c 4c 42 41 43 4b 20 26 26 20 28 64 62 2d  ROLLBACK && (db-
17470 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 49 6e  >flags&SQLITE_In
17480 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 20  ternChanges)!=0 
17490 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
174a0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
174b0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
174c0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
174d0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
174e0 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
174f0 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  b);.          db
17500 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66  ->flags = (db->f
17510 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e  lags | SQLITE_In
17520 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20  ternChanges);.  
17530 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
17540 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
17550 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
17560 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
17570 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
17580 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
17590 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
175a0 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
175b0 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
175c0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
175d0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
175e0 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
175f0 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
17600 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
17610 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
17620 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
17630 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
17640 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
17650 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
17660 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
17670 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
17680 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17690 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
176a0 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
176b0 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
176c0 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
176d0 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
176e0 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
176f0 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
17700 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
17710 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
17720 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
17730 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
17740 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
17750 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
17760 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
17770 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
17780 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
17790 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
177a0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
177b0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
177c0 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
177d0 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
177e0 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
177f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
17800 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
17810 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
17820 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
17830 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
17840 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
17850 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
17860 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
17870 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
17880 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17890 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
178a0 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
178b0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
178c0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
178d0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
178e0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
178f0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
17900 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
17910 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
17920 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
17930 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
17940 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61  oint(db, p1, iSa
17950 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
17960 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
17970 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
17980 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17990 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
179a0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
179b0 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d   Opcode: AutoCom
179c0 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mit P1 P2 * * *.
179d0 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61  **.** Set the da
179e0 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d  tabase auto-comm
179f0 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31  it flag to P1 (1
17a00 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73   or 0). If P2 is
17a10 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62   true, roll.** b
17a20 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c  ack any currentl
17a30 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74  y active btree t
17a40 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20  ransactions. If 
17a50 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
17a60 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61  tive.** VMs (apa
17a70 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65  rt from this one
17a80 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41  ), then a ROLLBA
17a90 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d  CK fails.  A COM
17aa0 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20  MIT fails if.** 
17ab0 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
17ac0 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20   writing VMs or 
17ad0 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20  active VMs that 
17ae0 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65  use shared cache
17af0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
17b00 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20  truction causes 
17b10 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a  the VM to halt..
17b20 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43  */.case OP_AutoC
17b30 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64  ommit: {.  int d
17b40 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17b50 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63  ;.  int iRollbac
17b60 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41  k;.  int turnOnA
17b70 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74  C;..  desiredAut
17b80 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70  oCommit = pOp->p
17b90 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d  1;.  iRollback =
17ba0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e   pOp->p2;.  turn
17bb0 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75  OnAC = desiredAu
17bc0 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d  toCommit && !db-
17bd0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61  >autoCommit;.  a
17be0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17bf0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64  toCommit==1 || d
17c00 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17c10 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
17c20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17c30 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61  it==1 || iRollba
17c40 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ck==0 );.  asser
17c50 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69  t( db->nVdbeActi
17c60 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  ve>0 );  /* At l
17c70 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
17c80 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20   is active */.  
17c90 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
17ca0 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20  ader );..#if 0. 
17cb0 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
17cc0 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   iRollback && db
17cd0 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20  ->nVdbeActive>1 
17ce0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
17cf0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
17d00 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42  plements a ROLLB
17d10 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  ACK and other VM
17d20 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69  s are.    ** sti
17d30 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20  ll running, and 
17d40 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
17d50 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20   active, return 
17d60 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
17d70 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  ing.    ** that 
17d80 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
17d90 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
17da0 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
17db0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
17dc0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
17dd0 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63   "cannot rollbac
17de0 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  k transaction - 
17df0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
17e00 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17e10 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
17e20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17e30 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20   }else.#endif.  
17e40 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
17e50 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62  !iRollback && db
17e60 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
17e70 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
17e80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
17e90 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
17ea0 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
17eb0 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
17ec0 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
17ed0 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
17ee0 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
17ef0 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
17f00 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
17f10 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17f20 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
17f30 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  b, "cannot commi
17f40 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
17f50 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
17f60 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17f70 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
17f80 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17f90 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
17fa0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
17fb0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
17fc0 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
17fd0 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
17fe0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17ff0 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
18000 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
18010 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
18020 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
18030 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
18040 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
18050 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
18060 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
18070 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
18080 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
18090 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
180a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
180b0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
180c0 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
180d0 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28  ommit;.      if(
180e0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
180f0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
18100 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
18110 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
18120 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18130 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
18140 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
18150 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
18160 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18170 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18180 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
18190 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
181a0 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
181b0 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
181c0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
181d0 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
181e0 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
181f0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
18200 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
18210 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
18220 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18230 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
18240 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
18250 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  se{.    sqlite3S
18260 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
18270 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20  rMsg, db,.      
18280 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
18290 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
182a0 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
182b0 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
182c0 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
182d0 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
182e0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
182f0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
18300 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
18330 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
18340 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
18350 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
18360 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18370 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18380 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
18390 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
183a0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
183b0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
183c0 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
183d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
183e0 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
183f0 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
18400 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
18410 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
18420 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
18430 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
18440 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
18450 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
18460 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
18470 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
18480 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
18490 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
184a0 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
184b0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
184c0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
184d0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
184e0 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
184f0 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
18500 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
18510 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
18520 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
18530 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
18540 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
18550 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
18560 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
18570 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
18580 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
18590 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
185a0 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
185b0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
185c0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
185d0 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
185e0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
185f0 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
18600 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
18610 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
18620 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
18630 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
18640 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
18650 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
18660 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
18670 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
18680 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
18690 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
186a0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
186b0 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
186c0 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
186d0 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
186e0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
186f0 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
18700 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
18710 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
18720 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
18730 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
18740 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
18750 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
18760 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
18770 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
18780 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
18790 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
187a0 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
187b0 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
187c0 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
187d0 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
187e0 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
187f0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
18800 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
18810 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
18820 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
18830 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
18840 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
18850 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
18860 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
18870 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
18880 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
18890 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
188a0 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
188b0 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
188c0 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
188d0 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
188e0 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
188f0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
18900 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
18910 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
18920 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
18930 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
18940 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
18950 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
18960 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
18970 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
18980 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
18990 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
189a0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
189b0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
189c0 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
189d0 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
189e0 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
189f0 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
18a00 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
18a10 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
18a20 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
18a30 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
18a40 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
18a50 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
18a60 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
18a70 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
18a80 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
18a90 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
18aa0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
18ab0 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
18ac0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
18ad0 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
18ae0 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
18af0 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
18b00 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
18b10 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
18b20 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
18b30 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
18b40 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
18b50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
18b60 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
18b70 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
18b80 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
18b90 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
18ba0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
18bb0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
18bc0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
18bd0 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
18be0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
18bf0 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
18c00 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18c10 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
18c20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
18c30 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
18c40 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
18c50 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18c60 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
18c70 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
18c80 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
18c90 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
18ca0 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
18cb0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
18cc0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
18cd0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18ce0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
18cf0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18d00 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18d10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18d20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
18d30 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
18d40 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
18d50 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
18d60 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
18d70 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
18d80 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
18d90 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
18da0 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
18db0 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
18dc0 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
18dd0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18de0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
18df0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
18e00 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
18e10 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
18e20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
18e30 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
18e40 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
18e50 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
18e60 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
18e70 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18e80 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18e90 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
18ea0 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
18eb0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
18ec0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
18ed0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
18ee0 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
18ef0 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
18f00 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
18f10 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
18f20 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
18f30 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
18f40 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
18f50 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
18f60 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
18f70 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18f80 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
18f90 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
18fa0 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
18fb0 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
18fc0 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
18fd0 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
18fe0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
18ff0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
19000 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
19010 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
19020 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
19030 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
19040 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
19050 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
19060 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
19070 69 6e 67 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ing */.    sqlit
19080 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
19090 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
190a0 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
190b0 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
190c0 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
190d0 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
190e0 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
190f0 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
19100 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
19110 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
19120 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  ==0 || pOp->p4ty
19130 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
19140 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26    if( pOp->p5 &&
19150 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33   (iMeta!=pOp->p3
19160 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70   || iGen!=pOp->p
19170 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  4.i) ){.    sqli
19180 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
19190 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
191a0 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
191b0 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
191c0 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
191d0 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
191e0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
191f0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
19200 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
19210 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
19220 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
19230 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
19240 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
19250 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
19260 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
19270 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
19280 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
19290 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
192a0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
192b0 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
192c0 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
192d0 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
192e0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
192f0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
19300 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
19310 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
19320 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
19330 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
19340 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
19350 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
19360 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
19370 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
19380 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
19390 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
193a0 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
193b0 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
193c0 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
193d0 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
193e0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
193f0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
19400 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
19410 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
19420 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
19430 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
19440 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
19450 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
19460 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
19470 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
19480 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
19490 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
194a0 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
194b0 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
194c0 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
194d0 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
194e0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
194f0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
19500 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
19510 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
19520 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65  ;.    }.    p->e
19530 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
19540 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
19550 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  MA;.  }.  break;
19560 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
19570 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
19580 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
19590 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
195a0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
195b0 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
195c0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
195d0 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
195e0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
195f0 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
19600 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
19610 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
19620 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
19630 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
19640 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
19650 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
19660 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
19670 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
19680 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19690 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
196a0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
196b0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
196c0 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
196d0 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
196e0 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
196f0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
19700 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
19710 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
19720 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
19730 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
19740 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
19750 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
19760 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
19770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
19780 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
19790 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
197a0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
197b0 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
197c0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
197d0 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
197e0 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
197f0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
19800 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
19810 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
19820 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
19830 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
19840 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
19850 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
19860 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19870 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
19880 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
19890 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
198a0 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
198b0 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
198c0 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
198d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
198e0 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
198f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
19900 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
19910 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
19920 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
19930 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69 6e   register P3 (in
19940 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e 20  terpreted as an 
19950 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f  integer).** into
19960 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50   cookie number P
19970 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  2 of database P1
19980 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20  .  P2==1 is the 
19990 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
199a0 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68   .** P2==2 is th
199b0 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
199c0 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  t. P2==3 is the 
199d0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
199e0 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
199f0 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
19a00 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
19a10 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
19a20 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
19a30 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
19a40 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
19a50 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
19a60 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
19a70 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
19a80 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
19a90 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
19aa0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
19ab0 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  _SetCookie: {   
19ac0 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
19ad0 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
19ae0 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
19af0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
19b00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
19b10 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
19b20 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
19b30 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
19b40 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
19b50 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
19b60 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
19b70 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
19b80 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
19b90 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
19ba0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
19bb0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
19bc0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
19bd0 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
19be0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
19bf0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69 74  Op->p3];.  sqlit
19c00 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
19c10 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a 20  ify(pIn3);.  /* 
19c20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
19c30 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
19c40 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
19c50 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
19c60 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
19c70 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
19c80 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e  2, (int)pIn3->u.
19c90 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i);.  if( pOp->p
19ca0 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
19cb0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
19cc0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
19cd0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
19ce0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
19cf0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
19d00 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
19d10 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
19d20 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49 6e  ookie = (int)pIn
19d30 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d 3e  3->u.i;.    db->
19d40 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
19d50 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20  InternChanges;. 
19d60 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
19d70 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46  p2==BTREE_FILE_F
19d80 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20  ORMAT ){.    /* 
19d90 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69  Record changes i
19da0 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  n the file forma
19db0 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  t */.    pDb->pS
19dc0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
19dd0 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e 75  at = (u8)pIn3->u
19de0 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  .i;.  }.  if( pO
19df0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
19e00 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
19e10 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
19e20 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
19e30 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
19e40 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
19e50 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
19e60 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
19e70 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
19e80 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
19e90 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
19ea0 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
19eb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19ec0 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20  de: OpenRead P1 
19ed0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
19ee0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
19ef0 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
19f00 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63  en a read-only c
19f10 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61  ursor for the da
19f20 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f  tabase table who
19f30 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a  se root page is.
19f40 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62  ** P2 in a datab
19f50 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64  ase file.  The d
19f60 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
19f70 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33  determined by P3
19f80 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e  . .** P3==0 mean
19f90 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
19fa0 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73  ase, P3==1 means
19fb0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73   the database us
19fc0 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f  ed for .** tempo
19fd0 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64  rary tables, and
19fe0 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64   P3>1 means used
19ff0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
1a000 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64  ng attached.** d
1a010 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74  atabase.  Give t
1a020 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e  he new cursor an
1a030 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50   identifier of P
1a040 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61  1.  The P1.** va
1a050 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65  lues need not be
1a060 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20   contiguous but 
1a070 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68  all P1 values sh
1a080 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e  ould be small in
1a090 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73  tegers..** It is
1a0a0 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31   an error for P1
1a0b0 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e   to be negative.
1a0c0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
1a0d0 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e  then use the con
1a0e0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1a0f0 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20   P2 as the root 
1a100 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65  page, not.** the
1a110 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73   value of P2 its
1a120 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  elf..**.** There
1a130 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20   will be a read 
1a140 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
1a150 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68  base whenever th
1a160 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65  ere is an.** ope
1a170 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68  n cursor.  If th
1a180 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75  e database was u
1a190 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f  nlocked prior to
1a1a0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1a1b0 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64  n.** then a read
1a1c0 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
1a1d0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  d as part of thi
1a1e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
1a1f0 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61  A read.** lock a
1a200 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63  llows other proc
1a210 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68  esses to read th
1a220 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70  e database but p
1a230 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20  rohibits.** any 
1a240 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72  other process fr
1a250 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65  om modifying the
1a260 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
1a270 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20  read lock is.** 
1a280 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c  released when al
1a290 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c  l cursors are cl
1a2a0 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69  osed.  If this i
1a2b0 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d  nstruction attem
1a2c0 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20  pts.** to get a 
1a2d0 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61  read lock but fa
1a2e0 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20  ils, the script 
1a2f0 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20  terminates with 
1a300 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  an.** SQLITE_BUS
1a310 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a  Y error code..**
1a320 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1a330 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1a340 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1a350 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1a360 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1a370 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1a380 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1a390 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1a3a0 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
1a3b0 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
1a3c0 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
1a3d0 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1a3e0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1a3f0 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1a400 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
1a410 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
1a420 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1a430 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1a440 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
1a450 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1a460 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1a470 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1a480 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f  : OpenWrite, Reo
1a490 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63  penIdx.*/./* Opc
1a4a0 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50  ode: ReopenIdx P
1a4b0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1a4c0 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1a4d0 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1a4e0 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70  The ReopenIdx op
1a4f0 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74  code works exact
1a500 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e  ly like ReadOpen
1a510 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1a520 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20  first.** checks 
1a530 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75  to see if the cu
1a540 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c  rsor on P1 is al
1a550 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20  ready open with 
1a560 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e  a root page.** n
1a570 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20  umber of P2 and 
1a580 69 66 20 69 74 20 69 73 20 74 68 69 73 20 6f 70  if it is this op
1a590 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e  code becomes a n
1a5a0 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20  o-op.  In other 
1a5b0 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65  words,.** if the
1a5c0 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61   cursor is alrea
1a5d0 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20  dy open, do not 
1a5e0 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a  reopen it..**.**
1a5f0 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f   The ReopenIdx o
1a600 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62  pcode may only b
1a610 65 20 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d  e used with P5==
1a620 30 20 61 6e 64 20 77 69 74 68 20 50 34 20 62 65  0 and with P4 be
1a630 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49  ing.** a P4_KEYI
1a640 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72  NFO object.  Fur
1a650 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33  thermore, the P3
1a660 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74   value must be t
1a670 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76  he same as.** ev
1a680 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e  ery other Reopen
1a690 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20  Idx or OpenRead 
1a6a0 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72  for the same cur
1a6b0 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a  sor number..**.*
1a6c0 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65  * See the OpenRe
1a6d0 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65  ad opcode docume
1a6e0 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
1a6f0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
1a700 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
1a710 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
1a720 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1a730 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1a740 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1a750 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
1a760 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
1a770 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1a780 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
1a790 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20  ** page is P2.  
1a7a0 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20  Or if P5!=0 use 
1a7b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1a7c0 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69  egister P2 to fi
1a7d0 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70  nd the.** root p
1a7e0 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  age..**.** The P
1a7f0 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1a800 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1a810 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1a820 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1a830 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1a840 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1a850 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1a860 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1a870 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1a880 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1a890 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1a8a0 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1a8b0 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1a8c0 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1a8d0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1a8e0 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1a8f0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1a900 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1a910 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1a920 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1a930 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74  e table, or to t
1a940 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e  he.** largest in
1a950 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d  dex of any colum
1a960 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  n of the table t
1a970 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  hat is actually 
1a980 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  used..**.** This
1a990 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
1a9a0 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65  ks just like Ope
1a9b0 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
1a9c0 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
1a9d0 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
1a9e0 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f  /write mode.  Fo
1a9f0 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c  r a given table,
1aa00 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e   there can be on
1aa10 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f  e or more read-o
1aa20 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f  nly.** cursors o
1aa30 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f  r a single read/
1aa40 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74  write cursor but
1aa50 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a   not both..**.**
1aa60 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65   See also OpenRe
1aa70 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ad..*/.case OP_R
1aa80 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 56 64  eopenIdx: {.  Vd
1aa90 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1aaa0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1aab0 70 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p5==0 );.  asser
1aac0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1aad0 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20  P4_KEYINFO );.  
1aae0 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
1aaf0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
1ab00 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67  pCur && pCur->pg
1ab10 6e 6f 52 6f 6f 74 3d 3d 70 4f 70 2d 3e 70 32 20  noRoot==pOp->p2 
1ab20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1ab30 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70  Cur->iDb==pOp->p
1ab40 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61  3 );      /* Gua
1ab50 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63  ranteed by the c
1ab60 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1ab70 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
1ab80 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
1ab90 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  or is not curren
1aba0 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f  tly open or is o
1abb0 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65  pen on a differe
1abc0 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74  nt.  ** index, t
1abd0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1abe0 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61   into OP_OpenRea
1abf0 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f  d to force a reo
1ac00 70 65 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  pen */.}.case OP
1ac10 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20  _OpenRead:.case 
1ac20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a  OP_OpenWrite: {.
1ac30 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1ac40 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1ac50 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1ac60 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1ac70 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1ac80 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1ac90 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1aca0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f  ;..  assert( (pO
1acb0 70 2d 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32  p->p5&(OPFLAG_P2
1acc0 49 53 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c  ISREG|OPFLAG_BUL
1acd0 4b 43 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20  KCSR))==pOp->p5 
1ace0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1acf0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1ad00 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1ad10 35 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  5==0 );.  assert
1ad20 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1ad30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ad40 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1ad50 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Read || pOp->opc
1ad60 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64  ode==OP_ReopenId
1ad70 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70  x.          || p
1ad80 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
1ad90 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  ..  if( p->expir
1ada0 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
1adb0 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 20 20 20  QLITE_ABORT;.   
1adc0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e   break;.  }..  n
1add0 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
1ade0 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
1adf0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
1ae00 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1ae10 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1ae20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
1ae30 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1ae40 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1ae50 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20  , iDb) );.  pDb 
1ae60 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
1ae70 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
1ae80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
1ae90 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1aea0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1aeb0 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c  rite ){.    wrFl
1aec0 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65  ag = 1;.    asse
1aed0 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1aee0 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
1aef0 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
1af00 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
1af10 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d  file_format < p-
1af20 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1af30 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  mat ){.      p->
1af40 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1af50 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d  at = pDb->pSchem
1af60 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a  a->file_format;.
1af70 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1af80 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20     wrFlag = 0;. 
1af90 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
1afa0 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45   & OPFLAG_P2ISRE
1afb0 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  G ){.    assert(
1afc0 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73   p2>0 );.    ass
1afd0 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65  ert( p2<=(p->nMe
1afe0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
1aff0 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  .    pIn2 = &aMe
1b000 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72  m[p2];.    asser
1b010 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
1b020 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  n2) );.    asser
1b030 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
1b040 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1b050 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1b060 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1b070 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69  n2);.    p2 = (i
1b080 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn2->u.i;.  
1b090 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75    /* The p2 valu
1b0a0 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66  e always comes f
1b0b0 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43  rom a prior OP_C
1b0c0 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64  reateTable opcod
1b0d0 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61  e and.    ** tha
1b0e0 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  t opcode will al
1b0f0 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20  ways set the p2 
1b100 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f  value to 2 or mo
1b110 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e  re or else fail.
1b120 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65  .    ** If there
1b130 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c   were a failure,
1b140 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
1b150 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
1b160 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a  ve halted.    **
1b170 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67   before reaching
1b180 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b190 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45  n. */.    if( NE
1b1a0 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20  VER(p2<2) ) {.  
1b1b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b1c0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
1b1d0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1b1e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1b1f0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70   }.  }.  if( pOp
1b200 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1b210 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
1b220 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1b230 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73  KeyInfo;.    ass
1b240 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1b250 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1b260 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1b270 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1b280 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
1b290 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65  Info->nField+pKe
1b2a0 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a  yInfo->nXField;.
1b2b0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1b2c0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1b2d0 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
1b2e0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
1b2f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b300 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1b310 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a  t( nField>=0 );.
1b320 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65    testcase( nFie
1b330 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62  ld==0 );  /* Tab
1b340 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20  le with INTEGER 
1b350 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
1b360 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a  nothing else */.
1b370 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
1b380 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1b390 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
1b3a0 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d   1);.  if( pCur=
1b3b0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1b3c0 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1b3d0 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1b3e0 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1b3f0 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1b400 20 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69   p2;.  rc = sqli
1b410 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1b420 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
1b430 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70  KeyInfo, pCur->p
1b440 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
1b450 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1b460 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1b470 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d  OPFLAG_BULKCSR==
1b480 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29  BTREE_BULKLOAD )
1b490 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
1b4a0 43 75 72 73 6f 72 48 69 6e 74 73 28 70 43 75 72  CursorHints(pCur
1b4b0 2d 3e 70 43 75 72 73 6f 72 2c 20 28 70 4f 70 2d  ->pCursor, (pOp-
1b4c0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c  >p5 & OPFLAG_BUL
1b4d0 4b 43 53 52 29 29 3b 0a 0a 20 20 2f 2a 20 53 69  KCSR));..  /* Si
1b4e0 6e 63 65 20 69 74 20 70 65 72 66 6f 72 6d 73 20  nce it performs 
1b4f0 6e 6f 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  no memory alloca
1b500 74 69 6f 6e 20 6f 72 20 49 4f 2c 20 74 68 65 20  tion or IO, the 
1b510 6f 6e 6c 79 20 76 61 6c 75 65 20 74 68 61 74 0a  only value that.
1b520 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1b530 65 43 75 72 73 6f 72 28 29 20 6d 61 79 20 72 65  eCursor() may re
1b540 74 75 72 6e 20 69 73 20 53 51 4c 49 54 45 5f 4f  turn is SQLITE_O
1b550 4b 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  K. */.  assert( 
1b560 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
1b570 0a 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56  ..  /* Set the V
1b580 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c  dbeCursor.isTabl
1b590 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76  e variable. Prev
1b5a0 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1b5b0 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1b5c0 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1b5d0 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1b5e0 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1b5f0 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1b600 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1b610 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1b620 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1b630 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1b640 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1b650 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1b660 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1b670 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1b680 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1b690 34 5f 4b 45 59 49 4e 46 4f 3b 0a 20 20 62 72 65  4_KEYINFO;.  bre
1b6a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b6b0 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1b6c0 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1b6d0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1b6e0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1b6f0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1b700 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1b710 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1b720 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1b730 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1b740 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1b750 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1b760 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1b770 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1b780 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1b790 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1b7a0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1b7b0 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1b7c0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1b7d0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1b7e0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1b7f0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1b800 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1b810 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1b820 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1b830 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1b840 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1b850 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1b860 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1b870 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1b880 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1b890 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1b8a0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1b8b0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1b8c0 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1b8d0 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1b8e0 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1b8f0 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1b900 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1b910 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1b920 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1b930 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1b940 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1b950 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1b960 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1b970 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1b980 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1b990 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1b9a0 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1b9b0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1b9c0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1b9d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1b9e0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1b9f0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1ba00 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1ba10 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1ba20 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1ba30 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1ba40 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1ba50 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1ba60 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1ba70 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1ba80 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1ba90 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1baa0 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1bab0 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1bac0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1bad0 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1bae0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1baf0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1bb00 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1bb10 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1bb20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1bb30 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1bb40 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1bb50 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1bb60 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1bb70 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1bb80 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1bb90 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1bba0 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1bbb0 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1bbc0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1bbd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bbe0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1bbf0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1bc00 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1bc10 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69  >p2, -1, 1);.  i
1bc20 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1bc30 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1bc40 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1bc50 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  Cx->isEphemeral 
1bc60 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
1bc70 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d  te3BtreeOpen(db-
1bc80 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70  >pVfs, 0, db, &p
1bc90 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20  Cx->pBt, .      
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55    BTREE_OMIT_JOU
1bcc0 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e  RNAL | BTREE_SIN
1bcd0 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76  GLE | pOp->p5, v
1bce0 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20  fsFlags);.  if( 
1bcf0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1bd00 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1bd10 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
1bd20 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20  (pCx->pBt, 1);. 
1bd30 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
1bd40 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
1bd50 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1bd60 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
1bd70 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
1bd80 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
1bd90 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1bda0 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
1bdb0 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  e BTREE_BLOBKEY 
1bdc0 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
1bdd0 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
1bde0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
1bdf0 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
1be00 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
1be10 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
1be20 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
1be30 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
1be40 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45  1 (an BLOB_INTKE
1be50 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
1be60 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e  .    if( (pKeyIn
1be70 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1be80 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20  yInfo)!=0 ){.   
1be90 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
1bea0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1beb0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1bec0 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
1bed0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1bee0 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
1bef0 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  t, &pgno, BTREE_
1bf00 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70  BLOBKEY | pOp->p
1bf10 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72  5); .      if( r
1bf20 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1bf30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1bf40 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  pgno==MASTER_ROO
1bf50 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61  T+1 );.        a
1bf60 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1bf70 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20  >db==db );.     
1bf80 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1bf90 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1bfa0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78  ) );.        pCx
1bfb0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
1bfc0 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72  yInfo;.        r
1bfd0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1bfe0 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
1bff0 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e   pgno, 1, pKeyIn
1c000 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  fo, pCx->pCursor
1c010 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1c020 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1c030 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1c040 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1c050 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1c060 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
1c070 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
1c080 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
1c090 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1c0a0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
1c0b0 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f  >isOrdered = (pO
1c0c0 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f  p->p5!=BTREE_UNO
1c0d0 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b  RDERED);.  break
1c0e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c0f0 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32  SorterOpen P1 P2
1c100 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1c110 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1c120 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1c130 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1c140 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1c150 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1c160 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1c170 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1c180 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1c190 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1c1a0 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1c1b0 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2f  rt algorithm..*/
1c1c0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
1c1d0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
1c1e0 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1c1f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1c200 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c210 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
1c220 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1c230 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1c240 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20  p->p2, -1, 1);. 
1c250 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1c260 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1c270 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1c280 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1c290 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1c2a0 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1c2b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1c2c0 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d  >pKeyInfo->enc==
1c2d0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20  ENC(db) );.  rc 
1c2e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
1c2f0 74 65 72 49 6e 69 74 28 64 62 2c 20 70 43 78 29  terInit(db, pCx)
1c300 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c310 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
1c320 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
1c330 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33  .** Synopsis: P3
1c340 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32   columns in r[P2
1c350 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ].**.** Open a n
1c360 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
1c370 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
1c380 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
1c390 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
1c3a0 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
1c3b0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
1c3c0 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65  t one row is the
1c3d0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
1c3e0 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
1c3f0 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
1c400 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
1c410 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
1c420 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
1c430 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
1c440 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
1c450 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
1c460 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
1c470 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
1c480 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
1c490 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
1c4a0 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
1c4b0 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
1c4c0 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
1c4d0 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
1c4e0 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
1c4f0 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
1c500 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1c510 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
1c520 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
1c530 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
1c540 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
1c550 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
1c560 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
1c570 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
1c580 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
1c590 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
1c5a0 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
1c5b0 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
1c5c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1c5d0 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
1c5e0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1c5f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1c600 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1c610 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20  pOp->p3>=0 );.  
1c620 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1c630 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1c640 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 30 29   pOp->p3, -1, 0)
1c650 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1c660 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1c670 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1c680 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64 6f 54  ;.  pCx->pseudoT
1c690 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70  ableReg = pOp->p
1c6a0 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
1c6b0 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28  e = 1;.  assert(
1c6c0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1c6d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c6e0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1c6f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1c700 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1c710 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1c720 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1c730 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1c740 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1c750 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1c760 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1c770 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1c780 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1c790 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1c7a0 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1c7b0 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1c7c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1c7d0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1c7e0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1c7f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1c800 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32  de: SeekGE P1 P2
1c810 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1c820 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1c830 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1c840 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1c850 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1c860 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1c870 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1c880 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1c890 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1c8a0 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1c8b0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c8c0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1c8d0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1c8e0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1c8f0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1c900 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1c910 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1c920 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1c930 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1c940 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1c950 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1c960 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1c970 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1c980 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1c990 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1c9a0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1c9b0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1c9c0 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1c9d0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1c9e0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1c9f0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1ca00 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1ca10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1ca20 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1ca30 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1ca40 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1ca50 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1ca60 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1ca70 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1ca80 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1ca90 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1caa0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1cab0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1cac0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1cad0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1cae0 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1caf0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1cb00 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20  code: SeekGT P1 
1cb10 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1cb20 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1cb30 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1cb40 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1cb50 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1cb60 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1cb70 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1cb80 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1cb90 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1cba0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1cbb0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1cbc0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1cbd0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1cbe0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1cbf0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1cc00 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1cc10 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1cc20 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1cc30 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1cc40 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1cc50 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1cc60 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1cc70 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1cc80 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1cc90 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1cca0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1ccb0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
1ccc0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1ccd0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1cce0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1ccf0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1cd00 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1cd10 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1cd20 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1cd30 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1cd40 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 69 6e  from the beginin
1cd50 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
1cd60 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1cd70 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1cd80 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1cd90 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
1cda0 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
1cdb0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1cdc0 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
1cdd0 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1cde0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1cdf0 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LT P1 P2 P3 P4 *
1ce00 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b   .** Synopsis: k
1ce10 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1ce20 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1ce30 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1ce40 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1ce50 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1ce60 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1ce70 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1ce80 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1ce90 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1cea0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1ceb0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1cec0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ced0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1cee0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1cef0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1cf00 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1cf10 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1cf20 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1cf30 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1cf40 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1cf50 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1cf60 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1cf70 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1cf80 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1cf90 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68   records less th
1cfa0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1cfb0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1cfc0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1cfd0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1cfe0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1cff0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1d000 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
1d010 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
1d020 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
1d030 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
1d040 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
1d050 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1d060 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1d070 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
1d080 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Next..**.** See
1d090 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1d0a0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
1d0b0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1d0c0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1d0d0 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20  kLE P1 P2 P3 P4 
1d0e0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1d0f0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1d100 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1d110 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1d120 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1d130 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1d140 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1d150 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1d160 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1d170 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1d180 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1d190 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1d1a0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1d1b0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1d1c0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1d1d0 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1d1e0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1d1f0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1d200 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1d210 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
1d220 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1d230 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1d240 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1d250 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1d260 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1d270 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1d280 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
1d290 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1d2a0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1d2b0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1d2c0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1d2d0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1d2e0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1d2f0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1d300 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
1d310 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1d320 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
1d330 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
1d340 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1d350 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1d360 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
1d370 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
1d380 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1d390 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1d3a0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1d3b0 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1d3c0 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
1d3d0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1d3e0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a  .case OP_SeekLE:
1d3f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1d400 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1d410 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
1d420 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1d430 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a  .case OP_SeekGT:
1d440 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1d450 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1d460 65 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20  es;.  int oc;.  
1d470 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1d480 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1d490 20 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   r;.  int nField
1d4a0 3b 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20  ;.  i64 iKey;   
1d4b0 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1d4c0 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1d4d0 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  o */..  assert( 
1d4e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1d4f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1d500 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d510 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1d520 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1d530 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1d540 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1d550 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1d560 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
1d570 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
1d580 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
1d590 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1d5a0 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
1d5b0 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
1d5c0 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
1d5d0 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
1d5e0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1d5f0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
1d600 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1d610 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d  0 );.  oc = pOp-
1d620 3e 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e  >opcode;.  pC->n
1d630 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64  ullRow = 0;.#ifd
1d640 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1d650 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
1d660 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
1d670 69 66 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  if.  if( pC->isT
1d680 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
1d690 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
1d6a0 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
1d6b0 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
1d6c0 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
1d6d0 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f  ,.    ** blob, o
1d6e0 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1d6f0 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1d700 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1d710 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74   can do.    ** t
1d720 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 76 65  he seek, so cove
1d730 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49  rt it. */.    pI
1d740 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1d750 70 33 5d 3b 0a 20 20 20 20 41 70 70 6c 79 4e 75  p3];.    ApplyNu
1d760 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1d770 6e 33 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  n3);.    iKey = 
1d780 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
1d790 6c 75 65 28 70 49 6e 33 29 3b 0a 20 20 20 20 70  lue(pIn3);.    p
1d7a0 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1d7b0 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  = 0;..    /* If 
1d7c0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1d7d0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1d7e0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1d7f0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1d800 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
1d810 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
1d820 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
1d830 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
1d840 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  /.    if( (pIn3-
1d850 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1d860 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
1d870 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1d880 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
1d890 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
1d8a0 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
1d8b0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1d8c0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
1d8d0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
1d8e0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1d8f0 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1d900 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1d910 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 63  P2 */.        pc
1d920 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20   = pOp->p2 - 1; 
1d930 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1d940 28 31 2c 32 29 3b 0a 20 20 20 20 20 20 20 20 62  (1,2);.        b
1d950 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  reak;.      }.. 
1d960 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
1d970 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
1d980 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e  y is larger than
1d990 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
1d9a0 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
1d9b0 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
1d9c0 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c  e >= for > and <
1d9d0 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66   for <=. e.g. if
1d9e0 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d   the search term
1d9f0 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39  .      ** is 4.9
1da00 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72   and the integer
1da10 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35   approximation 5
1da20 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  :.      **.     
1da30 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20   **        (x > 
1da40 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
1da50 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a  (x >= 5).      *
1da60 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34  *        (x <= 4
1da70 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
1da80 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a   <  5).      */.
1da90 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
1daa0 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r<(double)iKey )
1dab0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1dac0 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50  ( OP_SeekGE==(OP
1dad0 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20  _SeekGT-1) );.  
1dae0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1daf0 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65  _SeekLT==(OP_See
1db00 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kLE-1) );.      
1db10 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
1db20 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLE & 0x0001)==
1db30 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1db40 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
1db50 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
1db60 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1db70 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a  0x0001) ) oc--;.
1db80 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1db90 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1dba0 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73  mation iKey is s
1dbb0 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20  maller than the 
1dbc0 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1dbd0 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1dbe0 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20  , substitute <= 
1dbf0 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20  for < and > for 
1dc00 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c  >=.  */.      el
1dc10 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 72 3e 28  se if( pIn3->r>(
1dc20 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1dc30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1dc40 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65  P_SeekLE==(OP_Se
1dc50 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekLT+1) );.     
1dc60 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1dc70 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  ekGT==(OP_SeekGE
1dc80 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
1dc90 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1dca0 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  T & 0x0001)==(OP
1dcb0 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31  _SeekGE & 0x0001
1dcc0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1dcd0 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1dce0 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1dcf0 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20  001) ) oc++;.   
1dd00 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20     }.    } .    
1dd10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1dd20 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1dd30 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
1dd40 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
1dd50 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
1dd60 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1dd70 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1dd80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1dd90 20 7d 0a 20 20 20 20 69 66 28 20 72 65 73 3d 3d   }.    if( res==
1dda0 30 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 72  0 ){.      pC->r
1ddb0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 31 3b  owidIsValid = 1;
1ddc0 0a 20 20 20 20 20 20 70 43 2d 3e 6c 61 73 74 52  .      pC->lastR
1ddd0 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 20  owid = iKey;.   
1dde0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1ddf0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1de00 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  .i;.    assert( 
1de10 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1de20 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73  INT32 );.    ass
1de30 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
1de40 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1de50 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1de60 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1de70 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
1de80 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e   /* The next lin
1de90 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74  e of code comput
1dea0 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f  es as follows, o
1deb0 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20  nly faster:.    
1dec0 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
1ded0 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGT || oc==OP
1dee0 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a  _SeekLE ){.    *
1def0 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
1df00 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20  rc = -1;.    ** 
1df10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20    }else{.    ** 
1df20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
1df30 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = +1;.    **   
1df40 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64  }.    */.    r.d
1df50 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20  efault_rc = ((1 
1df60 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c  & (oc - OP_SeekL
1df70 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a  T)) ? -1 : +1);.
1df80 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
1df90 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64  OP_SeekGT || r.d
1dfa0 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
1dfb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
1dfc0 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e  =OP_SeekLE || r.
1dfd0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
1dfe0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
1dff0 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72  !=OP_SeekGE || r
1e000 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
1e010 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
1e020 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c!=OP_SeekLT || 
1e030 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
1e040 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
1e050 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1e060 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1e070 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
1e080 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
1e090 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
1e0a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1e0b0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
1e0c0 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61  .#endif.    Expa
1e0d0 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
1e0e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e0f0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1e100 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1e110 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
1e120 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1e130 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1e140 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e150 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1e160 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1e170 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  alid = 0;.  }.  
1e180 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1e190 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
1e1a0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1e1b0 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
1e1c0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
1e1d0 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
1e1e0 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69  nt++;.#endif.  i
1e1f0 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45  f( oc>=OP_SeekGE
1e200 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d   ){  assert( oc=
1e210 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63  =OP_SeekGE || oc
1e220 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20  ==OP_SeekGT );. 
1e230 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20     if( res<0 || 
1e240 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
1e250 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20  P_SeekGT) ){.   
1e260 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
1e270 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e280 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43 75 72  reeNext(pC->pCur
1e290 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1e2a0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e2b0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1e2c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1e2d0 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1e2e0 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1e2f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
1e300 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
1e310 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1e320 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
1e330 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
1e340 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
1e350 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1e360 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
1e370 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1e380 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1e390 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1e3a0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
1e3b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1e3c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1e3d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e3e0 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e  rror;.      pC->
1e3f0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1e400 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1e410 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
1e420 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
1e430 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
1e440 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
1e450 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
1e460 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
1e470 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
1e480 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
1e490 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 70 43 75  BtreeEof(pC->pCu
1e4a0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
1e4b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e4c0 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72  p2>0 );.  VdbeBr
1e4d0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
1e4e0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
1e4f0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1e500 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1e510 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1e520 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20 2a 20  e: Seek P1 P2 * 
1e530 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1e540 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a    intkey=r[P2].*
1e550 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
1e560 65 6e 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  en table cursor 
1e570 61 6e 64 20 50 32 20 69 73 20 61 20 72 6f 77 69  and P2 is a rowi
1e580 64 20 69 6e 74 65 67 65 72 2e 20 20 41 72 72 61  d integer.  Arra
1e590 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31 20 74 6f  nge.** for P1 to
1e5a0 20 6d 6f 76 65 20 73 6f 20 74 68 61 74 20 69 74   move so that it
1e5b0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 72   points to the r
1e5c0 6f 77 69 64 20 67 69 76 65 6e 20 62 79 20 50 32  owid given by P2
1e5d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
1e5e0 61 63 74 75 61 6c 6c 79 20 61 20 64 65 66 65 72  actually a defer
1e5f0 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
1e600 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
1e610 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
1e620 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
1e630 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
1e640 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
1e650 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
1e660 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
1e670 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
1e680 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20  /.case OP_Seek: 
1e690 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20  {    /* in2 */. 
1e6a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e6b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e6c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1e6d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1e6e0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1e6f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1e700 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1e710 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1e720 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
1e730 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
1e740 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1e750 3d 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  = 0;.  pIn2 = &a
1e760 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
1e770 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
1e780 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
1e790 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
1e7a0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e7b0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65   = 0;.  pC->defe
1e7c0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1e7d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f    break;.}.  ../
1e7e0 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
1e7f0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e800 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1e810 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1e820 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
1e830 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
1e840 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
1e850 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
1e860 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
1e870 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
1e880 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
1e890 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
1e8a0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
1e8b0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
1e8c0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1e8d0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1e8e0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1e8f0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1e900 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
1e910 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
1e920 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
1e930 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
1e940 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
1e950 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
1e960 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
1e970 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
1e980 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1e990 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1e9a0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1e9b0 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
1e9c0 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
1e9d0 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
1e9e0 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
1e9f0 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
1ea00 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
1ea10 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
1ea20 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1ea30 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
1ea40 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
1ea50 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
1ea60 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
1ea70 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1ea80 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1ea90 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1eaa0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1eab0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1eac0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1ead0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1eae0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1eaf0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1eb00 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1eb10 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1eb20 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1eb30 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1eb40 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1eb50 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1eb60 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1eb70 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1eb80 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
1eb90 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
1eba0 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1ebb0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1ebc0 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
1ebd0 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
1ebe0 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
1ebf0 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
1ec00 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
1ec10 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
1ec20 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
1ec30 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1ec40 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
1ec50 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
1ec60 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
1ec70 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1ec80 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
1ec90 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1eca0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1ecb0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
1ecc0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
1ecd0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
1ece0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1ecf0 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
1ed00 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
1ed10 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
1ed20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
1ed30 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1ed40 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
1ed50 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
1ed60 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
1ed70 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
1ed80 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1ed90 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1eda0 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1edb0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1edc0 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1edd0 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1ede0 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1edf0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1ee00 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ee10 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1ee20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1ee30 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1ee40 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
1ee50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
1ee60 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
1ee70 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
1ee80 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
1ee90 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e  * contains any N
1eea0 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  ULL value, jump 
1eeb0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1eec0 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73  2.  If all terms
1eed0 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
1eee0 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74  d are not-NULL t
1eef0 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64  hen a check is d
1ef00 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  one to determine
1ef10 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74   if any row in t
1ef20 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62  he.** P1 index b
1ef30 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68  tree has a match
1ef40 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20  ing key prefix. 
1ef50 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ef60 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a   matches, jump.*
1ef70 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
1ef80 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69   P2.  If there i
1ef90 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20  s a match, fall 
1efa0 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76  through and leav
1efb0 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73  e the P1.** curs
1efc0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
1efd0 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e  he matching row.
1efe0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1eff0 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  de is similar to
1f000 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74   OP_NotFound wit
1f010 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  h the exceptions
1f020 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61   that the.** bra
1f030 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61  nch is always ta
1f040 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20  ken if any part 
1f050 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65  of the search ke
1f060 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  y input is NULL.
1f070 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
1f080 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
1f090 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
1f0a0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
1f0b0 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
1f0c0 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
1f0d0 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
1f0e0 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
1f0f0 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
1f100 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
1f110 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
1f120 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
1f130 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
1f140 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
1f150 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
1f160 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
1f170 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1f180 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
1f190 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1f1a0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
1f1b0 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
1f1c0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1f1d0 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
1f1e0 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
1f1f0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1f200 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
1f210 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
1f220 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
1f230 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
1f240 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
1f250 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
1f260 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
1f270 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
1f280 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*4 + 7];..#if
1f290 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1f2a0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f2b0 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
1f2c0 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
1f2d0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1f2e0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1f2f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f300 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f310 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f320 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1f330 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f340 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f350 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1f360 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1f370 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1f380 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1f390 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
1f3a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
1f3b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
1f3c0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
1f3d0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
1f3e0 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20  e==0 );.  pFree 
1f3f0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
1f400 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
1f410 74 6f 20 73 75 70 70 72 65 73 73 20 61 20 63 6f  to suppress a co
1f420 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
1f430 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
1f440 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b  .i>0 ){.    r.pK
1f450 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
1f460 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
1f470 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
1f480 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d  p4.i;.    r.aMem
1f490 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72   = pIn3;.    for
1f4a0 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1f4b0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1f4c0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1f4d0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lid(&r.aMem[ii])
1f4e0 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64   );.      Expand
1f4f0 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d  Blob(&r.aMem[ii]
1f500 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1f510 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69 66 28  _DEBUG.      if(
1f520 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54   ii ) REGISTER_T
1f530 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c  RACE(pOp->p3+ii,
1f540 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23   &r.aMem[ii]);.#
1f550 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20  endif.    }.    
1f560 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20  pIdxKey = &r;.  
1f570 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b  }else{.    pIdxK
1f580 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  ey = sqlite3Vdbe
1f590 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63  AllocUnpackedRec
1f5a0 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d  ord(.        pC-
1f5b0 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70  >pKeyInfo, aTemp
1f5c0 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d  Rec, sizeof(aTem
1f5d0 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20  pRec), &pFree.  
1f5e0 20 20 29 3b 20 0a 20 20 20 20 69 66 28 20 70 49    ); .    if( pI
1f5f0 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20  dxKey==0 ) goto 
1f600 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
1f610 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1f620 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
1f630 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
1f640 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
1f650 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a 20 7a 65 72  o)==0 );  /* zer
1f660 6f 62 6c 6f 62 73 20 61 6c 72 65 61 64 79 20 65  oblobs already e
1f670 78 70 61 6e 64 65 64 20 2a 2f 0a 20 20 20 20 73  xpanded */.    s
1f680 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
1f690 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
1f6a0 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
1f6b0 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
1f6c0 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e  .  }.  pIdxKey->
1f6d0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
1f6e0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f6f0 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e==OP_NoConflict
1f700 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74   ){.    /* For t
1f710 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  he OP_NoConflict
1f720 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68   opcode, take th
1f730 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66  e jump if any of
1f740 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75   the.    ** inpu
1f750 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c  t fields are NUL
1f760 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79  L, since any key
1f770 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c   with a NULL wil
1f780 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e  l not.    ** con
1f790 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72  flict */.    for
1f7a0 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
1f7b0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
1f7c0 20 69 66 28 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e   if( r.aMem[ii].
1f7d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
1f7e0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d   ){.        pc =
1f7f0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 56 64   pOp->p2 - 1; Vd
1f800 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1f810 32 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  2);.        brea
1f820 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
1f830 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
1f840 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
1f850 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73  packed(pC->pCurs
1f860 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
1f870 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
1f880 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a  pOp->p4.i==0 ){.
1f890 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1f8a0 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20  e(db, pFree);.  
1f8b0 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
1f8c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65  TE_OK ){.    bre
1f8d0 61 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65  ak;.  }.  pC->se
1f8e0 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
1f8f0 20 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20    alreadyExists 
1f900 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43  = (res==0);.  pC
1f910 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c  ->nullRow = 1-al
1f920 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70  readyExists;.  p
1f930 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1f940 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1f950 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1f960 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f  _STALE;.  if( pO
1f970 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f  p->opcode==OP_Fo
1f980 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42  und ){.    VdbeB
1f990 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61  ranchTaken(alrea
1f9a0 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  dyExists!=0,2);.
1f9b0 20 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45      if( alreadyE
1f9c0 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70  xists ) pc = pOp
1f9d0 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73  ->p2 - 1;.  }els
1f9e0 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
1f9f0 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
1fa00 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20  ists==0,2);.    
1fa10 69 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73  if( !alreadyExis
1fa20 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70  ts ) pc = pOp->p
1fa30 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  2 - 1;.  }.  bre
1fa40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1fa50 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
1fa60 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1fa70 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
1fa80 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
1fa90 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
1faa0 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
1fab0 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
1fac0 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
1fad0 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61   keys).  P3 is a
1fae0 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  n integer rowid.
1faf0 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74    If P1 does not
1fb00 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
1fb10 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20  d with.** rowid 
1fb20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
1fb30 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1fb40 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
1fb50 61 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20  ain a record.** 
1fb60 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
1fb70 65 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75 72  en leave the cur
1fb80 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  sor pointing at 
1fb90 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20  that record and 
1fba0 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20  fall.** through 
1fbb0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
1fbc0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
1fbd0 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
1fbe0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
1fbf0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
1fc00 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
1fc10 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
1fc20 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
1fc30 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
1fc40 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1fc50 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1fc60 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1fc70 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
1fc80 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
1fc90 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
1fca0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1fcb0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
1fcc0 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
1fcd0 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
1fce0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
1fcf0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1fd00 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
1fd10 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73  oConflict.*/.cas
1fd20 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
1fd30 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
1fd40 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
1fd50 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
1fd60 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
1fd70 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
1fd80 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
1fd90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1fda0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
1fdb0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
1fdc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1fdd0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1fde0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1fdf0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1fe00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1fe10 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
1fe20 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1fe30 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
1fe40 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  0;.#endif.  asse
1fe50 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
1fe60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1fe70 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
1fe80 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
1fe90 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61  pC->pCursor;.  a
1fea0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
1feb0 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
1fec0 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
1fed0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1fee0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1fef0 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b  ked(pCrsr, 0, iK
1ff00 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1ff10 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1ff20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 70 43 2d  pIn3->u.i;.  pC-
1ff30 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1ff40 72 65 73 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 70  res==0 ?1:0;.  p
1ff50 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1ff60 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1ff70 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1ff80 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1ff90 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62  oveto = 0;.  Vdb
1ffa0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
1ffb0 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
1ffc0 73 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  s!=0 ){.    pc =
1ffd0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1ffe0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
1fff0 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 20 29 3b  widIsValid==0 );
20000 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
20010 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 62  esult = res;.  b
20020 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
20030 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20  de: Sequence P1 
20040 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
20050 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73  psis: r[P2]=curs
20060 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a  or[P1].ctr++.**.
20070 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
20080 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
20090 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
200a0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
200b0 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
200c0 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
200d0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
200e0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
200f0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
20100 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
20110 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
20120 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
20130 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
20140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
20150 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
20160 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20170 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20180 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20190 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
201a0 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
201b0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
201c0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
201d0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
201e0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
201f0 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
20200 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
20210 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
20220 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
20230 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
20240 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
20250 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
20260 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
20270 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
20280 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
20290 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
202a0 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
202b0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
202c0 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
202d0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
202e0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
202f0 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
20300 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
20310 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
20320 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
20330 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
20340 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
20350 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
20360 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
20370 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
20380 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
20390 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
203a0 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
203b0 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
203c0 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
203d0 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
203e0 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
203f0 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
20400 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
20410 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
20420 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
20430 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
20440 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
20450 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
20460 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
20470 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
20480 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
20490 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
204a0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
204b0 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
204c0 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
204d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
204e0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
204f0 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20  i64 v;          
20500 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
20510 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62  w rowid */.  Vdb
20520 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
20530 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66      /* Cursor of
20540 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68   table to get th
20550 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
20560 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
20570 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
20580 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42  t of an sqlite3B
20590 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20  treeLast() */.  
205a0 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20  int cnt;        
205b0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
205c0 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e  r to limit the n
205d0 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65  umber of searche
205e0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
205f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20600 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
20610 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20  g largest rowid 
20620 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  for AUTOINCREMEN
20630 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  T */.  VdbeFrame
20640 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a   *pFrame;     /*
20650 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56   Root frame of V
20660 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b  DBE */..  v = 0;
20670 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
20680 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20690 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
206a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
206b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
206c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
206d0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45 56  !=0 );.  if( NEV
206e0 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d  ER(pC->pCursor==
206f0 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  0) ){.    /* The
20700 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61   zero initializa
20710 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61 6c  tion above is al
20720 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65 64  l that is needed
20730 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
20740 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77   /* The next row
20750 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d  id or record num
20760 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20 74  ber (different t
20770 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d  erms for the sam
20780 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20  e.    ** thing) 
20790 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61  is obtained in a
207a0 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69   two-step algori
207b0 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  thm..    **.    
207c0 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74 65  ** First we atte
207d0 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20  mpt to find the 
207e0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
207f0 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f   rowid and add o
20800 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61  ne.    ** to tha
20810 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 6c  t.  But if the l
20820 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20  argest existing 
20830 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64 79  rowid is already
20840 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20   the maximum.   
20850 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74   ** positive int
20860 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f  eger, we have to
20870 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
20880 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
20890 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63  ** probabilistic
208a0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a   algorithm.    *
208b0 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63  *.    ** The sec
208c0 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  ond algorithm is
208d0 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77   to select a row
208e0 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  id at random and
208f0 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69   see if.    ** i
20900 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  t already exists
20910 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
20920 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  If it does not e
20930 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20  xist, we have.  
20940 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20    ** succeeded. 
20950 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72   If the random r
20960 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c  owid does exist,
20970 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77   we select a new
20980 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20   one.    ** and 
20990 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f  try again, up to
209a0 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20   100 times..    
209b0 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
209c0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23  C->isTable );..#
209d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
209e0 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66  IT_ROWID.#   def
209f0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78  ine MAX_ROWID 0x
20a00 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20  7fffffff.#else. 
20a10 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69     /* Some compi
20a20 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  lers complain ab
20a30 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66  out constants of
20a40 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66   the form 0x7fff
20a50 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20  ffffffffffff..  
20a60 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70    ** Others comp
20a70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66  lain about 0x7ff
20a80 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c  ffffffffffffffLL
20a90 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
20aa0 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20   macro seems.   
20ab0 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74   ** to provide t
20ac0 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c  he constant whil
20ad0 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d  e making all com
20ae0 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20  pilers happy..  
20af0 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20    */.#   define 
20b00 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29  MAX_ROWID  (i64)
20b10 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66 66  ( (((u64)0x7ffff
20b20 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34  fff)<<32) | (u64
20b30 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23 65  )0xffffffff ).#e
20b40 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70  ndif..    if( !p
20b50 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
20b60 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  d ){.      rc = 
20b70 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
20b80 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
20b90 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
20ba0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20bb0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
20bc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20bd0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
20be0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
20bf0 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
20c00 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
20c10 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
20c20 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20c30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
20c40 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 70  sorIsValid(pC->p
20c50 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
20c60 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20c70 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
20c80 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
20c90 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
20ca0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
20cb0 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20   /* Cannot fail 
20cc0 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c  following BtreeL
20cd0 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20 20  ast() */.       
20ce0 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
20cf0 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
20d00 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
20d10 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
20d20 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
20d30 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
20d40 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
20d50 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20d60 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
20d70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
20d80 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
20d90 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
20da0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
20db0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
20dc0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
20dd0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
20de0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
20df0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
20e00 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
20e10 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
20e20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
20e30 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
20e40 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
20e50 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
20e60 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
20e70 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
20e80 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20e90 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
20ea0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
20eb0 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
20ec0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
20ed0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
20ee0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
20ef0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
20f00 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
20f10 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
20f20 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
20f30 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
20f40 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
20f50 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
20f60 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f  ;.        memAbo
20f70 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d  utToChange(p, pM
20f80 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  em);.      }.   
20f90 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
20fa0 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a  Valid(pMem) );..
20fb0 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
20fc0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d  RACE(pOp->p3, pM
20fd0 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  em);.      sqlit
20fe0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
20ff0 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20  ify(pMem);.     
21000 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
21010 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
21020 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50  !=0 );  /* mem(P
21030 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65  3) holds an inte
21040 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ger */.      if(
21050 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f   pMem->u.i==MAX_
21060 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65  ROWID || pC->use
21070 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
21080 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
21090 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d  TE_FULL;   /* IM
210a0 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38  P: R-12275-61338
210b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   */.        goto
210c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
210d0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
210e0 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75     if( v<pMem->u
210f0 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20  .i+1 ){.        
21100 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20  v = pMem->u.i + 
21110 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  1;.      }.     
21120 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pMem->u.i = v;.
21130 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
21140 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64   if( pC->useRand
21150 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
21160 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49   /* IMPLEMENTATI
21170 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34  ON-OF: R-07677-4
21180 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72 67  1881 If the larg
21190 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71 75  est ROWID is equ
211a0 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20  al to the.      
211b0 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69  ** largest possi
211c0 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32 32  ble integer (922
211d0 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
211e0 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  ) then the datab
211f0 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67  ase.      ** eng
21200 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b 69  ine starts picki
21210 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64  ng positive cand
21220 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74 20  idate ROWIDs at 
21230 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20  random until.   
21240 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f     ** it finds o
21250 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70  ne that is not p
21260 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20  reviously used. 
21270 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
21280 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20   pOp->p3==0 );  
21290 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20  /* We cannot be 
212a0 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  in random rowid 
212b0 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73 0a  mode if this is.
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
212e0 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
212f0 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20   table. */.     
21300 20 2f 2a 20 6f 6e 20 74 68 65 20 66 69 72 73 74   /* on the first
21310 20 61 74 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79   attempt, simply
21320 20 64 6f 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   do one more tha
21330 6e 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  n previous */.  
21340 20 20 20 20 76 20 3d 20 6c 61 73 74 52 6f 77 69      v = lastRowi
21350 64 3b 0a 20 20 20 20 20 20 76 20 26 3d 20 28 4d  d;.      v &= (M
21360 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
21370 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
21380 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
21390 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73       v++; /* ens
213a0 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a  ure non-zero */.
213b0 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
213c0 20 20 20 20 20 77 68 69 6c 65 28 20 20 20 28 28       while(   ((
213d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
213e0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
213f0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20  pC->pCursor, 0, 
21400 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21430 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
21440 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
21450 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
21460 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
21470 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
21480 29 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 63  )){.        /* c
21490 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74 72 79 20 61  ollision - try a
214a0 6e 6f 74 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f  nother random ro
214b0 77 69 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  wid */.        s
214c0 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
214d0 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
214e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 63 6e  ;.        if( cn
214f0 74 3c 35 20 29 7b 0a 20 20 20 20 20 20 20 20 20  t<5 ){.         
21500 20 2f 2a 20 74 72 79 20 22 73 6d 61 6c 6c 22 20   /* try "small" 
21510 72 61 6e 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f  random rowids fo
21520 72 20 74 68 65 20 69 6e 69 74 69 61 6c 20 61 74  r the initial at
21530 74 65 6d 70 74 73 20 2a 2f 0a 20 20 20 20 20 20  tempts */.      
21540 20 20 20 20 76 20 26 3d 20 30 78 66 66 66 66 66      v &= 0xfffff
21550 66 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  f;.        }else
21560 7b 0a 20 20 20 20 20 20 20 20 20 20 76 20 26 3d  {.          v &=
21570 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
21580 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73 6e   /* ensure doesn
21590 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20 2a  't go negative *
215a0 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
215b0 20 20 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75      v++; /* ensu
215c0 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20  re non-zero */. 
215d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
215e0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
215f0 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  & res==0 ){.    
21600 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
21610 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
21620 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
21630 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
21640 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
21650 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
21660 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
21670 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
21680 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
21690 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
216a0 69 64 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  id = 0;.    pC->
216b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
216c0 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
216d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
216e0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75  STALE;.  }.  pOu
216f0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
21700 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21710 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20  e: Insert P1 P2 
21720 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
21730 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
21740 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  3] data=r[P2].**
21750 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74  .** Write an ent
21760 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ry into the tabl
21770 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20  e of cursor P1. 
21780 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a   A new entry is.
21790 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74  ** created if it
217a0 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
217b0 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61   exist or the da
217c0 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69  ta for an existi
217d0 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f  ng.** entry is o
217e0 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65  verwritten.  The
217f0 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c   data is the val
21800 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72  ue MEM_Blob stor
21810 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
21820 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
21830 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
21840 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
21850 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
21860 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a  e a MEM_Int..**.
21870 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21880 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
21890 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
218a0 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
218b0 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
218c0 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
218d0 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65  se not).  If the
218e0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
218f0 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  D flag of P5 is 
21900 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77  set,.** then row
21910 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72  id is stored for
21920 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75   subsequent retu
21930 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  rn by the.** sql
21940 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
21950 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
21960 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20  n (otherwise it 
21970 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  is unmodified)..
21980 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
21990 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
219a0 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
219b0 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72  set and if the r
219c0 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
219d0 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74  last seek operat
219e0 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74  ion (OP_NotExist
219f0 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73  s) was a success
21a00 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
21a10 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f  peration will no
21a20 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  t attempt to fin
21a30 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  d the appropriat
21a40 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69  e row before doi
21a50 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74  ng.** the insert
21a60 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61   but will instea
21a70 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  d overwrite the 
21a80 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72  row that the cur
21a90 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e  sor is.** curren
21aa0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  tly pointing to.
21ab0 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68    Presumably, th
21ac0 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78  e prior OP_NotEx
21ad0 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68  ists opcode.** h
21ae0 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74  as already posit
21af0 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
21b00 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69   correctly.  Thi
21b10 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
21b20 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f  tion.** that boo
21b30 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  sts performance 
21b40 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75  by avoiding redu
21b50 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a  ndant seeks..**.
21b60 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21b70 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
21b80 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
21b90 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
21ba0 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
21bb0 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
21bc0 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
21bd0 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
21be0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
21bf0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
21c00 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
21c10 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
21c20 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
21c30 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
21c40 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
21c50 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
21c60 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c   point to a Tabl
21c70 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20  e structure, or 
21c80 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
21c90 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55  it is .** not NU
21ca0 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
21cb0 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65  ate-hook (sqlite
21cc0 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
21cd0 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a  k) is invoked .*
21ce0 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  * following a su
21cf0 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
21d00 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
21d10 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
21d20 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
21d30 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
21d40 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
21d50 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
21d60 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
21d70 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
21d80 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
21d90 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
21da0 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
21db0 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
21dc0 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
21dd0 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
21de0 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
21df0 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
21e00 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
21e10 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
21e20 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
21e30 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
21e40 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
21e50 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
21e60 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
21e70 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
21e80 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
21e90 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
21ea0 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20  e: InsertInt P1 
21eb0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
21ec0 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
21ed0 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  =P3 data=r[P2].*
21ee0 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
21ef0 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f  exactly like OP_
21f00 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68  Insert except th
21f10 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68  at the key is th
21f20 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c  e.** integer val
21f30 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76  ue P3, not the v
21f40 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
21f50 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65  ger stored in re
21f60 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
21f70 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63  se OP_Insert: .c
21f80 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74  ase OP_InsertInt
21f90 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
21fa0 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
21fb0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
21fc0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
21fd0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
21fe0 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
21ff0 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
22000 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
22010 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
22020 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
22030 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65       /* The inte
22040 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79  ger ROWID or key
22050 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
22060 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
22070 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
22080 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
22090 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
220a0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
220b0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
220c0 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  Zero;        /* 
220d0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62  Number of zero-b
220e0 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a  ytes to append *
220f0 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
22100 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
22110 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
22120 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
22130 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
22140 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
22150 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
22160 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
22170 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
22180 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
22190 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74       /* Table st
221a0 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20 62  ructure - used b
221b0 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72 65  y update and pre
221c0 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f  -update hooks */
221d0 0a 20 20 69 6e 74 20 6f 70 20 3d 20 30 3b 20 20  .  int op = 0;  
221e0 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66       /* Opcode f
221f0 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20  or update hook: 
22200 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72  SQLITE_UPDATE or
22210 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a   SQLITE_INSERT *
22220 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  /..  pData = &aM
22230 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
22240 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22250 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22260 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
22270 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
22280 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
22290 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
222a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
222b0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
222c0 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
222d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
222e0 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d  >pseudoTableReg=
222f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22300 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
22310 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
22320 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c  type==P4_TABLE |
22330 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50  | pOp->p4type>=P
22340 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45  4_STATIC );.  RE
22350 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
22360 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20  ->p2, pData);.. 
22370 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
22380 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20  ==OP_Insert ){. 
22390 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b     pKey = &aMem[
223a0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73  pOp->p3];.    as
223b0 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67  sert( pKey->flag
223c0 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
223d0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
223e0 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20  Valid(pKey) );. 
223f0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
22400 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
22410 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65  ;.    iKey = pKe
22420 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
22430 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
22440 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
22450 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b  ertInt );.    iK
22460 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
22470 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  }..  if( pOp->p4
22480 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26  type==P4_TABLE &
22490 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f  & HAS_UPDATE_HOO
224a0 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73  K(db) ){.    ass
224b0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
224c0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
224d0 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
224e0 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
224f0 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a  pC->iDb].zName;.
22500 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
22510 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 6f 70 20  p4.pTab;.    op 
22520 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
22530 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
22540 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
22550 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b   SQLITE_INSERT);
22560 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
22570 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
22580 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
22590 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
225a0 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e  date hook, if an
225b0 79 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  y */.  if( db->x
225c0 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
225d0 6b 20 0a 20 20 20 26 26 20 70 4f 70 2d 3e 70 34  k .   && pOp->p4
225e0 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 0a 20  type==P4_TABLE. 
225f0 20 20 26 26 20 28 21 28 70 4f 70 2d 3e 70 35 20    && (!(pOp->p5 
22600 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
22610 45 29 20 7c 7c 20 70 43 2d 3e 72 6f 77 69 64 49  E) || pC->rowidI
22620 73 56 61 6c 69 64 3d 3d 30 29 0a 20 20 20 26 26  sValid==0).   &&
22630 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 0a   HasRowid(pTab).
22640 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33    ){.    sqlite3
22650 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
22660 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f  k(p, pC, SQLITE_
22670 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61  INSERT, zDb, pTa
22680 62 2c 20 69 4b 65 79 2c 20 70 4f 70 2d 3e 70 32  b, iKey, pOp->p2
22690 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
226a0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
226b0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
226c0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
226d0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
226e0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
226f0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
22700 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65   lastRowid = iKe
22710 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
22720 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
22730 20 29 7b 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a   ){.    pData->z
22740 20 3d 20 30 3b 0a 20 20 20 20 70 44 61 74 61 2d   = 0;.    pData-
22750 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  >n = 0;.  }else{
22760 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
22770 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
22780 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
22790 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
227a0 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
227b0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
227c0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
227d0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
227e0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
227f0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
22800 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61     nZero = pData
22810 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
22820 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20  se{.    nZero = 
22830 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  0;.  }.  rc = sq
22840 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
22850 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 30 2c  (pC->pCursor, 0,
22860 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
22890 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
228a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228b0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
228c0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21   OPFLAG_APPEND)!
228d0 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  =0, seekResult. 
228e0 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49   );.  pC->rowidI
228f0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
22900 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22910 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
22920 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
22930 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
22940 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
22950 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
22960 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
22970 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
22980 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
22990 26 20 6f 70 20 26 26 20 48 61 73 52 6f 77 69 64  & op && HasRowid
229a0 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 64 62  (pTab) ){.    db
229b0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
229c0 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
229d0 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d  , op, zDb, pTab-
229e0 3e 7a 4e 61 6d 65 2c 20 69 4b 65 79 29 3b 0a 20  >zName, iKey);. 
229f0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
22a00 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65  * Opcode: Delete
22a10 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
22a20 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
22a30 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
22a40 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
22a50 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
22a60 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ing..**.** The c
22a70 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
22a80 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65  ft pointing at e
22a90 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
22aa0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
22ab0 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
22ac0 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
22ad0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
22ae0 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
22af0 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
22b00 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
22b10 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
22b20 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69  -op.  Hence it i
22b30 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a  s OK to delete.*
22b40 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  * a record from 
22b50 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f  within a Next lo
22b60 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  op..**.** If the
22b70 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
22b80 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
22b90 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
22ba0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
22bb0 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
22bc0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
22bd0 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
22be0 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
22bf0 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
22c00 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
22c10 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
22c20 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
22c30 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
22c40 6e 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  n it points to a
22c50 20 54 61 62 6c 65 20 73 74 72 75 74 75 72 65 2e   Table struture.
22c60 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 65 69   In this case ei
22c70 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70 64  ther .** the upd
22c80 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61 74  ate or pre-updat
22c90 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c  e hook, or both,
22ca0 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e   may be invoked.
22cb0 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
22cc0 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e  ust.** have been
22cd0 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69 6e   positioned usin
22ce0 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
22cf0 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
22d00 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a  this opcode in .
22d10 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53 70  ** this case. Sp
22d20 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f  ecifically, if o
22d30 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  ne is configured
22d40 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  , the pre-update
22d50 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76   hook is .** inv
22d60 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e 6f  oked if P4 is no
22d70 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64 61  t NULL. The upda
22d80 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b  te-hook is invok
22d90 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e  ed if one is con
22da0 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20  figured, .** P4 
22db0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64  is not NULL, and
22dc0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
22dd0 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65 74 20  NGE flag is set 
22de0 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  in P2..**.** If 
22df0 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
22e00 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 20  ATE flag is set 
22e10 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20 63  in P2, then P3 c
22e20 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
22e30 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65  ess.** of the me
22e40 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63  mory cell that c
22e50 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75  ontains the valu
22e60 65 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64  e that the rowid
22e70 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c 6c   of the row will
22e80 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62 79  .** be set to by
22e90 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a   the update..*/.
22ea0 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
22eb0 7b 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20  {.  i64 iKey;.  
22ec0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
22ed0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
22ee0 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  b;.  Table *pTab
22ef0 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b  ;.  int opflags;
22f00 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f  ..  opflags = pO
22f10 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
22f20 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22f30 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22f40 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22f50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22f60 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22f70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22f80 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20 2f  pCursor!=0 );  /
22f90 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 72  * Only valid for
22fa0 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e 6f   real tables, no
22fb0 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a 2f   pseudotables */
22fc0 0a 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61  .  iKey = pC->la
22fd0 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 2f 2a  stRowid;      /*
22fe0 20 4f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   Only used for t
22ff0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
23000 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 44  /..  /* The OP_D
23010 65 6c 65 74 65 20 6f 70 63 6f 64 65 20 61 6c 77  elete opcode alw
23020 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f  ays follows an O
23030 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 20 4f  P_NotExists or O
23040 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a 2a 20 4f  P_Last or.  ** O
23050 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74 68 65 20  P_Column on the 
23060 73 61 6d 65 20 74 61 62 6c 65 20 77 69 74 68 6f  same table witho
23070 75 74 20 61 6e 79 20 69 6e 74 65 72 76 65 6e 69  ut any interveni
23080 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 68  ng operations th
23090 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74 20 6d 6f  at.  ** might mo
230a0 76 65 20 6f 72 20 69 6e 76 61 6c 69 64 61 74 65  ve or invalidate
230b0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65   the cursor.  He
230c0 6e 63 65 20 63 75 72 73 6f 72 20 70 43 20 69 73  nce cursor pC is
230d0 20 61 6c 77 61 79 73 20 70 6f 69 6e 74 69 6e 67   always pointing
230e0 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  .  ** to the row
230f0 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 20 61   to be deleted a
23100 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 56 64  nd the sqlite3Vd
23110 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
23120 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 2a 2a 20   operation.  ** 
23130 62 65 6c 6f 77 20 69 73 20 61 6c 77 61 79 73 20  below is always 
23140 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 6e  a no-op and cann
23150 6f 74 20 66 61 69 6c 2e 20 20 57 65 20 77 69 6c  ot fail.  We wil
23160 6c 20 72 75 6e 20 69 74 20 61 6e 79 68 6f 77 2c  l run it anyhow,
23170 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a 20 74 6f   though,.  ** to
23180 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 66   guard against f
23190 75 74 75 72 65 20 63 68 61 6e 67 65 73 20 74 6f  uture changes to
231a0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
231b0 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20 61 73 73  tor..  **/.  ass
231c0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
231d0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
231e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
231f0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
23200 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
23210 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
23220 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23230 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66  _error;..  /* If
23240 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
23250 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68   or pre-update-h
23260 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
23270 6b 65 64 2c 20 73 65 74 20 69 4b 65 79 20 74 6f  ked, set iKey to
23280 20 0a 20 20 2a 2a 20 74 68 65 20 72 6f 77 69 64   .  ** the rowid
23290 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65 69 6e   of the row bein
232a0 67 20 64 65 6c 65 74 65 64 2e 20 53 65 74 20 7a  g deleted. Set z
232b0 44 62 20 61 6e 64 20 7a 54 61 62 20 61 73 20 77  Db and zTab as w
232c0 65 6c 6c 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ell..  */.  if( 
232d0 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48 41 53  pOp->p4.z && HAS
232e0 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
232f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
23300 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
23310 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 72 6f    assert( pC->ro
23320 77 69 64 49 73 56 61 6c 69 64 20 7c 7c 20 21 48  widIsValid || !H
23330 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e  asRowid(pOp->p4.
23340 70 54 61 62 29 20 29 3b 0a 20 20 20 20 69 4b 65  pTab) );.    iKe
23350 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  y = pC->lastRowi
23360 64 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  d;.    zDb = db-
23370 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
23380 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
23390 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 7d  pOp->p4.pTab;. }
233a0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
233b0 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
233c0 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
233d0 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
233e0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
233f0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  d. */.  if( db->
23400 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
23410 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
23420 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  && HasRowid(pTab
23430 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
23440 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46   !(opflags & OPF
23450 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 7c 7c  LAG_ISUPDATE) ||
23460 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e   (aMem[pOp->p3].
23470 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
23480 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
23490 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b  dbePreUpdateHook
234a0 28 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20  (p, pC,.        
234b0 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
234c0 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51  G_ISUPDATE) ? SQ
234d0 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51  LITE_UPDATE : SQ
234e0 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20  LITE_DELETE, .  
234f0 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c        zDb, pTab,
23500 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 70   iKey,.        p
23510 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20  Op->p3.    );.  
23520 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  }.#endif..  if( 
23530 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
23540 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b  _ISNOOP ) break;
23550 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
23560 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e  BtreeDelete(pC->
23570 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e  pCursor);.  pC->
23580 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23590 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
235a0 20 55 70 64 61 74 65 20 74 68 65 20 63 68 61 6e   Update the chan
235b0 67 65 2d 63 6f 75 6e 74 65 72 20 61 6e 64 20 69  ge-counter and i
235c0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
235d0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
235e0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c  d. */.  if( opfl
235f0 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  ags & OPFLAG_NCH
23600 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ANGE ){.    p->n
23610 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 61 73  Change++;.    as
23620 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 20  sert( pOp->p4.z 
23630 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
23640 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e  QLITE_OK && db->
23650 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
23660 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  && HasRowid(pTab
23670 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78  ) ){.      db->x
23680 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
23690 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
236a0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
236b0 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 69  b, pTab->zName,i
236c0 4b 65 79 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Key);.    }.  }.
236d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
236e0 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
236f0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
23700 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
23710 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
23720 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
23730 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
23740 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
23750 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
23760 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
23770 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
23780 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
23790 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
237a0 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
237b0 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
237c0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
237d0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
237e0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
237f0 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
23800 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
23810 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
23820 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
23830 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
23840 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
23850 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
23860 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
23870 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29  sis:  if key(P1)
23880 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  !=trim(r[P3],P4)
23890 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
238a0 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
238b0 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
238c0 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
238d0 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
238e0 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  ** record blob i
238f0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
23900 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
23910 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
23920 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
23930 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
23940 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
23950 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
23960 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
23970 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
23980 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
23990 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
239a0 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
239b0 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
239c0 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
239d0 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
239e0 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
239f0 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
23a00 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
23a10 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
23a20 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
23a30 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
23a40 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
23a50 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
23a60 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
23a70 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
23a80 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
23a90 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
23aa0 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
23ab0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
23ac0 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
23ad0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
23ae0 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
23af0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23b00 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
23b10 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
23b20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23b30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23b40 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
23b50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23b60 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
23b70 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
23b80 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
23b90 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
23ba0 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
23bb0 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
23bc0 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
23bd0 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
23be0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
23bf0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
23c00 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
23c10 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
23c20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
23c30 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
23c40 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
23c50 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
23c60 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
23c70 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
23c80 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  P2 the current s
23c90 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73  orter data for s
23ca0 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e  orter cursor P1.
23cb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
23cc0 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  erData: {.  Vdbe
23cd0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
23ce0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
23cf0 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  >p2];.  pC = p->
23d00 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23d10 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
23d20 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d  er(pC) );.  rc =
23d30 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
23d40 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75  erRowkey(pC, pOu
23d50 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  t);.  assert( rc
23d60 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  !=SQLITE_OK || (
23d70 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pOut->flags & ME
23d80 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 62 72 65  M_Blob) );.  bre
23d90 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23da0 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
23db0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
23dc0 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
23dd0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
23de0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
23df0 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
23e00 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
23e10 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
23e20 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
23e30 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
23e40 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
23e50 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
23e60 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
23e70 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
23e80 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
23e90 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
23ea0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
23eb0 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
23ec0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
23ed0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
23ee0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
23ef0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
23f00 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
23f10 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
23f20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23f30 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a  psis: r[P2]=key.
23f40 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23f50 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23f60 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
23f70 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
23f80 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
23f90 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
23fa0 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
23fb0 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
23fc0 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
23fd0 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
23fe0 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
23ff0 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
24000 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
24010 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
24020 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
24030 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
24040 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
24050 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
24060 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
24070 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
24080 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
24090 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
240a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
240b0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
240c0 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
240d0 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
240e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
240f0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
24100 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
24110 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
24120 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
24130 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
24140 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
24150 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
24160 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24170 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24180 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24190 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
241a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
241b0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29  sSorter(pC)==0 )
241c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
241d0 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
241e0 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61  opcode!=OP_RowDa
241f0 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
24200 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c  pC->isTable==0 |
24210 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
24220 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
24230 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24240 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
24250 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
24260 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
24270 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
24280 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
24290 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
242a0 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
242b0 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
242c0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
242d0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
242e0 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77  .  /* The OP_Row
242f0 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61  Key and OP_RowDa
24300 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79  ta opcodes alway
24310 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45  s follow OP_NotE
24320 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50  xists or.  ** OP
24330 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20  _Rewind/Op_Next 
24340 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e  with no interven
24350 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ing instructions
24360 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61   that might inva
24370 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20  lidate.  ** the 
24380 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74  cursor.  Hence t
24390 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c  he following sql
243a0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
243b0 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61  veto() call is a
243c0 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d  lways.  ** a no-
243d0 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72  op and can never
243e0 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c   fail.  But we l
243f0 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65  eave it in place
24400 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20   as a safety..  
24410 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
24420 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
24430 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
24440 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
24450 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
24460 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
24470 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
24480 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
24490 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
244a0 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  le==0 ){.    ass
244b0 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c  ert( !pC->isTabl
244c0 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  e );.    VVA_ONL
244d0 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
244e0 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
244f0 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73  r, &n64);.    as
24500 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
24510 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75  _OK );    /* Tru
24520 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
24530 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
24540 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66   above */.    if
24550 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74  ( n64>db->aLimit
24560 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
24570 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
24580 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
24590 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29   }.    n = (u32)
245a0 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n64;.  }else{.  
245b0 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
245c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
245d0 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29  aSize(pCrsr, &n)
245e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
245f0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
24600 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
24610 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
24620 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62     if( n>(u32)db
24630 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
24640 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
24650 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
24660 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  big;.    }.  }. 
24670 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
24680 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c  MemGrow(pOut, n,
24690 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
246a0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f  no_mem;.  }.  pO
246b0 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d  ut->n = n;.  Mem
246c0 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
246d0 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69  , MEM_Blob);.  i
246e0 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
246f0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
24700 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43  lite3BtreeKey(pC
24710 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
24720 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >z);.  }else{.  
24730 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24740 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30  reeData(pCrsr, 0
24750 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
24760 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
24770 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
24780 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
24790 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20  ob is ever cast 
247a0 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44  to text */.  UPD
247b0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
247c0 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
247d0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
247e0 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
247f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24800 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
24810 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
24820 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
24830 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
24840 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
24850 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
24860 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
24870 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
24880 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
24890 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
248a0 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
248b0 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
248c0 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
248d0 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
248e0 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
248f0 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
24900 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
24910 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
24920 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
24930 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
24940 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
24950 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
24960 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24980 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
24990 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
249a0 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
249b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
249c0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
249d0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
249e0 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  dule;..  assert(
249f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24a00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24a10 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24a20 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24a30 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24a40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24a50 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
24a60 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0 || pC->nullRow
24a70 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
24a80 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
24a90 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
24aa0 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
24ab0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
24ac0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
24ad0 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
24ae0 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
24af0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
24b00 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
24b10 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74  else if( pC->pVt
24b20 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20  abCursor ){.    
24b30 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61  pVtab = pC->pVta
24b40 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
24b50 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
24b60 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
24b70 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
24b80 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
24b90 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
24ba0 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43  Rowid(pC->pVtabC
24bb0 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
24bc0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
24bd0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
24be0 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
24bf0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
24c00 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65  TABLE */.  }else
24c10 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
24c20 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
24c30 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24c40 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
24c50 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
24c60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
24c70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
24c80 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  if( pC->rowidIsV
24c90 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  alid ){.      v 
24ca0 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
24cb0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
24cc0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24cd0 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
24ce0 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
24cf0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
24d00 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
24d10 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
24d20 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
24d30 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  o() above */.   
24d40 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
24d50 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
24d60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
24d70 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20  ullRow P1 * * * 
24d80 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  *.**.** Move the
24d90 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
24da0 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f  null row.  Any O
24db0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69  P_Column operati
24dc0 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75  ons.** that occu
24dd0 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73  r while the curs
24de0 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c  or is on the nul
24df0 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79  l row will alway
24e00 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c  s.** write a NUL
24e10 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  L..*/.case OP_Nu
24e20 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43  llRow: {.  VdbeC
24e30 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
24e40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24e50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24e60 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24e70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24e80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24e90 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
24ea0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
24eb0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
24ec0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
24ed0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24ee0 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  E;.  if( pC->pCu
24ef0 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rsor ){.    sqli
24f00 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
24f10 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
24f20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
24f30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
24f40 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
24f50 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
24f60 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
24f70 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20   Column or Prev 
24f80 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
24f90 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
24fa0 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
24fb0 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
24fc0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
24fd0 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
24fe0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
24ff0 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
25000 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
25010 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
25020 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
25030 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
25040 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
25050 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
25060 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
25070 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
25080 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
25090 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
250a0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
250b0 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
250c0 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
250d0 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
250e0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
250f0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
25100 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
25110 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
25120 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
25130 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  t..*/.case OP_La
25140 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
25150 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
25160 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
25170 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
25180 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
25190 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
251a0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
251b0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
251c0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
251d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
251e0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
251f0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73  ->pCursor;.  res
25200 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
25210 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63  pCrsr!=0 );.  rc
25220 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
25230 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
25240 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
25250 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
25260 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
25270 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
25280 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
25290 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
252a0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
252b0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
252c0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
252d0 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66   OP_Last;.#endif
252e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30  .  if( pOp->p2>0
252f0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
25300 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
25310 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
25320 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
25330 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
25340 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
25350 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
25360 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
25370 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
25380 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
25390 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
253a0 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
253b0 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
253c0 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
253d0 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
253e0 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
253f0 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
25400 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
25410 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
25420 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
25430 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
25440 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
25450 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
25460 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
25470 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
25480 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
25490 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
254a0 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
254b0 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
254c0 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
254d0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
254e0 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
254f0 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
25500 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
25510 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
25520 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
25530 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
25540 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
25550 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
25560 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  ase OP_SorterSor
25570 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t:    /* jump */
25580 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b  .case OP_Sort: {
25590 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
255a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
255b0 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
255c0 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20  sort_count++;.  
255d0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
255e0 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20  ount--;.#endif. 
255f0 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
25600 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
25610 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  ORT]++;.  /* Fal
25620 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
25630 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
25640 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
25650 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
25660 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
25670 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
25680 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
25690 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
256a0 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
256b0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
256c0 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
256d0 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
256e0 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
256f0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
25700 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
25710 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
25720 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
25730 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
25740 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
25750 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
25760 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
25770 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
25780 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
25790 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
257a0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
257b0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
257c0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
257d0 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
257e0 74 68 65 20 62 65 67 69 6e 69 6e 67 20 74 6f 77  the begining tow
257f0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
25800 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
25810 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
25820 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
25830 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
25840 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
25850 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
25860 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
25870 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
25880 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
25890 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
258a0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
258b0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
258c0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
258d0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
258e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
258f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
25900 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
25910 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
25920 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
25930 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
25940 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
25950 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
25960 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
25970 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
25980 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
25990 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
259a0 6e 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  nd(db, pC, &res)
259b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
259c0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
259d0 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
259e0 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
259f0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
25a00 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
25a10 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
25a20 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
25a30 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
25a40 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25a50 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
25a60 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
25a70 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
25a80 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
25a90 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
25aa0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
25ab0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
25ac0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
25ad0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
25ae0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
25af0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
25b00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
25b10 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25b20 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
25b30 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
25b40 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
25b50 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
25b60 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
25b70 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
25b80 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
25b90 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
25ba0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
25bb0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
25bc0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
25bd0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
25be0 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
25bf0 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
25c00 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
25c10 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
25c20 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
25c30 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
25c40 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
25c50 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
25c60 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
25c70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
25c80 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
25c90 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
25ca0 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
25cb0 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
25cc0 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
25cd0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
25ce0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
25cf0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
25d00 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
25d10 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
25d20 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
25d30 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
25d40 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
25d50 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
25d60 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
25d70 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
25d80 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
25d90 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
25da0 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
25db0 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
25dc0 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
25dd0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
25de0 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
25df0 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
25e00 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
25e10 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
25e20 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
25e30 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
25e40 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
25e50 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
25e60 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
25e70 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
25e80 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
25e90 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
25ea0 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
25eb0 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
25ec0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
25ed0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
25ee0 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
25ef0 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
25f00 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
25f10 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
25f20 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
25f30 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49  lso: Prev, NextI
25f40 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  fOpen.*/./* Opco
25f50 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50  de: NextIfOpen P
25f60 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
25f70 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25f80 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
25f90 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
25fa0 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
25fb0 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
25fc0 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
25fd0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
25fe0 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
25ff0 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
26000 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
26010 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
26020 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
26030 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
26040 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
26050 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
26060 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
26070 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
26080 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
26090 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
260a0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
260b0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
260c0 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
260d0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
260e0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
260f0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
26100 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
26110 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
26120 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
26130 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
26140 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
26150 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
26160 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
26170 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
26180 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
26190 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
261a0 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
261b0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
261c0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
261d0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
261e0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
261f0 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
26200 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
26210 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
26220 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
26230 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
26240 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
26250 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
26260 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
26270 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
26280 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
26290 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
262a0 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
262b0 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
262c0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
262d0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
262e0 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
262f0 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
26300 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
26310 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
26320 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
26330 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
26340 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
26350 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
26360 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
26370 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
26380 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
26390 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
263a0 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
263b0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
263c0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
263d0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
263e0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
263f0 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
26400 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
26410 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
26420 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
26430 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74  like Prev except
26440 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
26450 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
26460 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
26470 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
26480 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
26490 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
264a0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
264b0 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20  nt res;..  pC = 
264c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
264d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
264e0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
264f0 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
26500 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
26510 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
26520 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f  s);.  goto next_
26530 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72  tail;.case OP_Pr
26540 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  evIfOpen:    /* 
26550 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
26560 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f  NextIfOpen:    /
26570 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
26580 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26590 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ]==0 ) break;.  
265a0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
265b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
265c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
265d0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
265e0 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
265f0 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
26600 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26610 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26620 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
26630 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
26640 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
26650 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26660 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73  [pOp->p1];.  res
26670 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
26680 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26690 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
266a0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
266b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
266c0 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  pCursor );.  ass
266d0 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28  ert( res==0 || (
266e0 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73  res==1 && pC->is
266f0 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74  Table==0) );.  t
26700 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20  estcase( res==1 
26710 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26720 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
26730 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  t || pOp->p4.xAd
26740 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
26750 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
26760 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26770 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
26780 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
26790 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
267a0 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ous );.  assert(
267b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
267c0 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70  _NextIfOpen || p
267d0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
267e0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
267f0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
26800 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
26810 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  revIfOpen || pOp
26820 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
26830 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
26840 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ous);..  /* The 
26850 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
26860 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
26870 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61  eekGT, SeekGE, a
26880 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20  nd Rewind..  ** 
26890 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
268a0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
268b0 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  er SeekLT, SeekL
268c0 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a  E, and Last. */.
268d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
268e0 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
268f0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
26900 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20  P_NextIfOpen.   
26910 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
26920 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  p==OP_SeekGT || 
26930 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26940 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekGE.       || 
26950 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52  pC->seekOp==OP_R
26960 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65  ewind || pC->see
26970 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a  kOp==OP_Found);.
26980 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26990 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
269a0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
269b0 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20  P_PrevIfOpen.   
269c0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
269d0 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  p==OP_SeekLT || 
269e0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
269f0 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekLE.       || 
26a00 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c  pC->seekOp==OP_L
26a10 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70  ast );..  rc = p
26a20 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28  Op->p4.xAdvance(
26a30 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
26a40 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20  s);.next_tail:. 
26a50 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
26a60 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
26a70 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
26a80 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69  n(res==0,2);.  i
26a90 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
26aa0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
26ab0 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
26ac0 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61  p2 - 1;.    p->a
26ad0 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d  Counter[pOp->p5]
26ae0 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
26af0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
26b00 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
26b10 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  +;.#endif.  }els
26b20 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
26b30 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  ow = 1;.  }.  pC
26b40 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
26b50 20 30 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b   0;.  goto check
26b60 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
26b70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
26b80 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
26b90 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69   * P5.** Synopsi
26ba0 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
26bb0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
26bc0 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
26bd0 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
26be0 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
26bf0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
26c00 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
26c10 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
26c20 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
26c30 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
26c40 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
26c50 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
26c60 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
26c70 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
26c80 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
26c90 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
26ca0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
26cb0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
26cc0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
26cd0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
26ce0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
26cf0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
26d00 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
26d10 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
26d20 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
26d30 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
26d40 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
26d50 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
26d60 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
26d70 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ed..**.** If P5 
26d80 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  has the OPFLAG_U
26d90 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74  SESEEKRESULT bit
26da0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
26db0 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a  ursor must have.
26dc0 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73  ** just done a s
26dd0 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20  eek to the spot 
26de0 77 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e  where the new en
26df0 74 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73  try is to be ins
26e00 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66  erted..** This f
26e10 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67  lag avoids doing
26e20 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a   an extra seek..
26e30 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
26e40 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
26e50 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
26e60 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
26e70 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
26e80 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
26e90 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
26ea0 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
26eb0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
26ec0 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
26ed0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
26ee0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
26ef0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
26f00 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
26f10 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
26f20 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
26f30 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
26f40 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
26f50 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
26f60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26f70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
26f80 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26f90 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
26fa0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
26fb0 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
26fc0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
26fd0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
26fe0 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
26ff0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
27000 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
27010 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  sor;.  if( pOp->
27020 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
27030 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
27040 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ++;.  assert( pC
27050 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
27060 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
27070 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
27080 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
27090 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
270a0 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 69 73  OK ){.    if( is
270b0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
270c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
270d0 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
270e0 64 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20  db, pC, pIn2);. 
270f0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
27100 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
27110 20 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e        zKey = pIn
27120 32 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d  2->z;.      rc =
27130 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
27140 65 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c  ert(pCrsr, zKey,
27150 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c   nKey, "", 0, 0,
27160 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20   pOp->p3, .     
27170 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26       ((pOp->p5 &
27180 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
27190 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
271a0 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20  kResult : 0).   
271b0 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20         );.      
271c0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
271d0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
271e0 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65  .      pC->cache
271f0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
27200 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  TALE;.    }.  }.
27210 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
27220 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
27230 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
27240 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
27250 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
27260 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
27270 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
27280 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
27290 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
272a0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
272b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
272c0 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
272d0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
272e0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
272f0 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
27300 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
27310 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27320 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
27330 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
27340 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
27350 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
27360 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
27370 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
27380 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
27390 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
273a0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
273b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
273c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
273d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
273e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
273f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27400 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
27410 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
27420 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
27430 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27440 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
27450 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
27460 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
27470 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
27480 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c  ->p3;.  r.defaul
27490 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d  t_rc = 0;.  r.aM
274a0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
274b0 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
274c0 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
274d0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
274e0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
274f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
27500 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
27510 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  }.#endif.  rc = 
27520 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
27530 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
27540 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
27550 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
27560 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
27570 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
27580 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
27590 70 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73  pCrsr);.  }.  as
275a0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
275b0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
275c0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
275d0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
275e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
275f0 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20  pcode: IdxRowid 
27600 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
27610 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
27620 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  owid.**.** Write
27630 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
27640 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
27650 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65  ch is the last e
27660 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f  ntry in the reco
27670 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64  rd at.** the end
27680 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
27690 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20  y pointed to by 
276a0 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73  cursor P1.  This
276b0 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20   integer should 
276c0 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20  be.** the rowid 
276d0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
276e0 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ry to which this
276f0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69   index entry poi
27700 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  nts..**.** See a
27710 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65  lso: Rowid, Make
27720 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20  Record..*/.case 
27730 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20  OP_IdxRowid: {  
27740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
27750 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
27760 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
27770 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
27780 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
27790 69 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  id;..  assert( p
277a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
277b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
277c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
277d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
277e0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
277f0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
27800 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
27810 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70   pCrsr!=0 );.  p
27820 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27830 5f 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71  _Null;.  rc = sq
27840 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
27850 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
27860 20 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74   NEVER(rc) ) got
27870 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27880 72 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rror;.  assert( 
27890 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
278a0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
278b0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
278c0 30 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e  0 );.  if( !pC->
278d0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
278e0 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
278f0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
27900 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
27910 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
27920 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27930 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
27940 43 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20  Crsr, &rowid);. 
27950 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
27960 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
27970 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27980 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
27990 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
279a0 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  id;.    pOut->fl
279b0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
279c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
279d0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
279e0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
279f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
27a00 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
27a10 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
27a20 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
27a30 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
27a40 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
27a50 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
27a60 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
27a70 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
27a80 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
27a90 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
27aa0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
27ab0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
27ac0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
27ad0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27ae0 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
27af0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
27b00 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
27b10 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
27b20 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
27b30 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
27b40 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
27b50 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
27b60 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
27b70 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
27b80 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
27b90 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
27ba0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
27bb0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
27bc0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
27bd0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
27be0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
27bf0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
27c00 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
27c10 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
27c20 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
27c30 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
27c40 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
27c50 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
27c60 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
27c70 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
27c80 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
27c90 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
27ca0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
27cb0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
27cc0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27cd0 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
27ce0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
27cf0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
27d00 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
27d10 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27d20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
27d30 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
27d40 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
27d50 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
27d60 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
27d70 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
27d80 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
27d90 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
27da0 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
27db0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
27dc0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
27dd0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27de0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
27df0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
27e00 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
27e10 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
27e20 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
27e30 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27e40 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
27e50 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
27e60 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
27e70 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
27e80 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
27e90 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
27ea0 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
27eb0 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
27ec0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
27ed0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
27ee0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
27ef0 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
27f00 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
27f10 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
27f20 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
27f30 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
27f40 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
27f50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
27f60 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
27f70 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
27f80 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27f90 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
27fa0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
27fb0 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
27fc0 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
27fd0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
27fe0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27ff0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
28000 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
28010 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
28020 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
28030 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
28040 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
28050 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
28060 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
28070 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
28080 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
28090 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
280a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
280b0 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
280c0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
280d0 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
280e0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
280f0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
28100 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
28110 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
28120 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
28130 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28140 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
28150 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
28160 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
28170 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28180 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28190 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
281a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
281b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
281c0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
281d0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
281e0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
281f0 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
28200 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
28210 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
28220 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
28230 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
28240 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
28250 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
28260 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
28270 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
28280 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
28290 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
282a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
282b0 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
282c0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
282d0 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
282e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
282f0 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
28300 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
28310 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28320 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
28330 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
28340 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
28350 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
28360 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
28370 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
28380 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
28390 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
283a0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
283b0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
283c0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
283d0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
283e0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
283f0 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
28400 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
28410 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
28420 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
28430 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
28440 78 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20  xKeyCompare(pC, 
28450 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73  &r, &res);.  ass
28460 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31  ert( (OP_IdxLE&1
28470 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
28480 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d  && (OP_IdxGE&1)=
28490 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b  =(OP_IdxGT&1) );
284a0 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63  .  if( (pOp->opc
284b0 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  ode&1)==(OP_IdxL
284c0 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65  T&1) ){.    asse
284d0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
284e0 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
284f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28500 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  LT );.    res = 
28510 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  -res;.  }else{. 
28520 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
28530 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
28540 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
28550 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
28560 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64   res++;.  }.  Vd
28570 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
28580 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  s>0,2);.  if( re
28590 73 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  s>0 ){.    pc = 
285a0 70 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20  pOp->p2 - 1 ;.  
285b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
285c0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
285d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
285e0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
285f0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
28600 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
28610 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
28620 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
28630 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
28640 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
28650 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
28660 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
28670 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
28680 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
28690 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
286a0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
286b0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
286c0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
286d0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
286e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
286f0 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
28700 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
28710 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
28720 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
28730 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
28740 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
28750 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
28760 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
28770 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
28780 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
28790 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
287a0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
287b0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
287c0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
287d0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
287e0 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
287f0 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
28800 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
28810 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
28820 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
28830 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
28840 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
28850 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
28860 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
28870 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
28880 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
28890 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
288a0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
288b0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
288c0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
288d0 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
288e0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
288f0 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
28900 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
28910 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
28920 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
28930 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
28940 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
28950 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
28960 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
28970 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
28980 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
28990 20 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62   int iCnt;.  Vdb
289a0 65 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20  e *pVdbe;.  int 
289b0 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  iDb;..  assert( 
289c0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
289d0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
289e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
289f0 4c 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20  LE.  iCnt = 0;. 
28a00 20 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70   for(pVdbe=db->p
28a10 56 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64  Vdbe; pVdbe; pVd
28a20 62 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78  be = pVdbe->pNex
28a30 74 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62  t){.    if( pVdb
28a40 65 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  e->magic==VDBE_M
28a50 41 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62  AGIC_RUN && pVdb
28a60 65 2d 3e 62 49 73 52 65 61 64 65 72 20 0a 20 20  e->bIsReader .  
28a70 20 20 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56     && pVdbe->inV
28a80 74 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70  tabMethod<2 && p
28a90 56 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20 20 20  Vdbe->pc>=0 .   
28aa0 20 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b   ){.      iCnt++
28ab0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73  ;.    }.  }.#els
28ac0 65 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 6e  e.  iCnt = db->n
28ad0 56 64 62 65 52 65 61 64 3b 0a 23 65 6e 64 69 66  VdbeRead;.#endif
28ae0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
28af0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
28b00 20 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72   iCnt>1 ){.    r
28b10 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
28b20 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
28b30 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
28b40 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
28b50 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
28b60 20 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d    assert( iCnt==
28b70 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
28b80 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
28b90 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
28ba0 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
28bb0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
28bc0 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
28bd0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
28be0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
28bf0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
28c00 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
28c10 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
28c20 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
28c30 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
28c40 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
28c50 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66 20  iMoved;.#ifndef 
28c60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
28c70 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 72  VACUUM.    if( r
28c80 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
28c90 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20  iMoved!=0 ){.   
28ca0 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61     sqlite3RootPa
28cb0 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c  geMoved(db, iDb,
28cc0 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31   iMoved, pOp->p1
28cd0 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  );.      /* All 
28ce0 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61  OP_Destroy opera
28cf0 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74  tions occur on t
28d00 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f  he same btree */
28d10 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
28d20 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
28d30 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68  t==0 || resetSch
28d40 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b  emaOnFault==iDb+
28d50 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74  1 );.      reset
28d60 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
28d70 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e  iDb+1;.    }.#en
28d80 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
28d90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
28da0 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a  lear P1 P2 P3.**
28db0 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63  .** Delete all c
28dc0 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64  ontents of the d
28dd0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
28de0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
28df0 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65  t page.** in the
28e00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
28e10 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20  s given by P1.  
28e20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74  But, unlike Dest
28e30 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72  roy, do not.** r
28e40 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20  emove the table 
28e50 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68  or index from th
28e60 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
28e70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
28e80 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20   being clear is 
28e90 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
28ea0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d  base file if P2=
28eb0 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31  =0.  If.** P2==1
28ec0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
28ed0 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
28ee0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
28ef0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
28f00 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
28f10 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
28f20 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
28f30 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
28f40 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E..**.** If the 
28f50 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P3 value is non-
28f60 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74  zero, then the t
28f70 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f  able referred to
28f80 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69   must be an.** i
28f90 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20  ntkey table (an 
28fa0 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  SQL table, not a
28fb0 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69  n index). In thi
28fc0 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63  s case the row c
28fd0 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20  hange .** count 
28fe0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
28ff0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
29000 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
29010 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
29020 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72   .** If P3 is gr
29030 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c  eater than zero,
29040 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
29050 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
29060 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f  er P3 is.** also
29070 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
29080 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
29090 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
290a0 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a  being cleared..*
290b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44  *.** See also: D
290c0 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f  estroy.*/.case O
290d0 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74  P_Clear: {.  int
290e0 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e 43   nChange;. .  nC
290f0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73  hange = 0;.  ass
29100 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
29110 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
29120 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
29130 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
29140 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  2) );.  rc = sql
29150 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
29160 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61  ble(.      db->a
29170 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c  Db[pOp->p2].pBt,
29180 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e   pOp->p1, (pOp->
29190 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20  p3 ? &nChange : 
291a0 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f  0).  );.  if( pO
291b0 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e  p->p3 ){.    p->
291c0 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e  nChange += nChan
291d0 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ge;.    if( pOp-
291e0 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61  >p3>0 ){.      a
291f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
29200 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
29210 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
29220 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
29230 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
29240 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e        aMem[pOp->
29250 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e  p3].u.i += nChan
29260 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ge;.    }.  }.  
29270 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29280 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72  ode: ResetSorter
29290 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
292a0 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
292b0 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65  tents from the e
292c0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f  phemeral table o
292d0 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74  r sorter.** that
292e0 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73   is open on curs
292f0 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  or P1..**.** Thi
29300 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f  s opcode only wo
29310 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  rks for cursors 
29320 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67  used for sorting
29330 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77   and.** opened w
29340 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ith OP_OpenEphem
29350 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  eral or OP_Sorte
29360 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rOpen..*/.case O
29370 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b  P_ResetSorter: {
29380 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
29390 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70  C;. .  assert( p
293a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
293b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
293c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
293d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
293e0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
293f0 20 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74 65    if( pC->pSorte
29400 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  r ){.    sqlite3
29410 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
29420 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72 29  db, pC->pSorter)
29430 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
29440 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68  ssert( pC->isEph
29450 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63  emeral );.    rc
29460 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
29470 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f  learTableOfCurso
29480 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  r(pC->pCursor);.
29490 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
294a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
294b0 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
294c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
294d0 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
294e0 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
294f0 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
29500 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
29510 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
29520 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
29530 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
29540 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
29550 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
29560 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
29570 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
29580 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
29590 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
295a0 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
295b0 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
295c0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
295d0 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
295e0 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
295f0 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
29600 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
29610 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
29620 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
29630 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
29640 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
29650 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
29660 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
29670 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
29680 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
29690 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
296a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
296b0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
296c0 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
296d0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
296e0 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
296f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
29700 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
29710 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
29720 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
29730 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
29740 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
29750 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
29760 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
29770 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
29780 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
29790 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
297a0 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
297b0 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
297c0 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
297d0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
297e0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
297f0 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
29800 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
29810 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73  rerelease */.cas
29820 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  e OP_CreateTable
29830 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
29840 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
29850 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
29860 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62   int flags;.  Db
29870 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d   *pDb;..  pgno =
29880 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
29890 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
298a0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
298b0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
298c0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
298d0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
298e0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
298f0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
29900 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
29910 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
29920 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
29930 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
29940 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
29950 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
29960 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
29970 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
29980 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
29990 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
299a0 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
299b0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
299c0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
299d0 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
299e0 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 70  gno, flags);.  p
299f0 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
29a00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
29a10 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
29a20 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
29a30 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
29a40 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
29a50 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
29a60 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
29a70 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
29a80 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
29a90 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
29aa0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
29ab0 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
29ac0 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
29ad0 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
29ae0 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
29af0 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
29b00 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
29b10 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
29b20 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
29b30 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
29b40 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
29b50 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
29b60 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
29b70 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
29b80 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
29b90 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
29ba0 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
29bb0 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
29bc0 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
29bd0 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
29be0 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
29bf0 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
29c00 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
29c10 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
29c20 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
29c30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
29c40 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
29c50 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
29c60 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
29c70 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
29c80 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
29c90 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
29ca0 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
29cb0 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
29cc0 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
29cd0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
29ce0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
29cf0 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
29d00 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
29d10 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
29d20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
29d30 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
29d40 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53  .    zMaster = S
29d50 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
29d60 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
29d70 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
29d80 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
29d90 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
29da0 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
29db0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
29dc0 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
29dd0 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
29de0 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
29df0 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
29e00 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20  %q'.%s WHERE %s 
29e10 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
29e20 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
29e30 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73  iDb].zName, zMas
29e40 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
29e50 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
29e60 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
29e70 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20  QLITE_NOMEM;.   
29e80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
29e90 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
29ea0 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
29eb0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
29ec0 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
29ed0 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
29ee0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
29ef0 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
29f00 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
29f10 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
29f20 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
29f30 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
29f40 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
29f50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
29f60 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
29f70 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
29f80 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
29f90 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  Sql);.      db->
29fa0 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20  init.busy = 0;. 
29fb0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
29fc0 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65 74  c ) sqlite3Reset
29fd0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
29fe0 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69 66  ection(db);.  if
29ff0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
2a000 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  EM ){.    goto n
2a010 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  o_mem;.  }.  bre
2a020 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65  ak;  .}..#if !de
2a030 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2a040 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70  T_ANALYZE)./* Op
2a050 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73  code: LoadAnalys
2a060 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  is P1 * * * *.**
2a070 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c  .** Read the sql
2a080 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
2a090 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
2a0a0 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e  and load the con
2a0b0 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20  tent.** of that 
2a0c0 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69  table into the i
2a0d0 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61  nternal index ha
2a0e0 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  sh table.  This 
2a0f0 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68  will cause.** th
2a100 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65  e analysis to be
2a110 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61   used when prepa
2a120 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75  ring all subsequ
2a130 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a  ent queries..*/.
2a140 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c  case OP_LoadAnal
2a150 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74  ysis: {.  assert
2a160 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2a170 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
2a180 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2a190 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62  3AnalysisLoad(db
2a1a0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62 72  , pOp->p1);.  br
2a1b0 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20  eak;  .}.#endif 
2a1c0 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
2a1d0 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
2a1e0 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2a1f0 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a  DropTable P1 * *
2a200 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2a210 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2a220 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2a230 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2a240 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2a250 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20   table named P4 
2a260 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2a270 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2a280 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a  after a table.**
2a290 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2a2a0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2a2b0 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2a2c0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2a2d0 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2a2e0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2a2f0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2a300 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2a310 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2a320 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2a330 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71  ropTable: {.  sq
2a340 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2a350 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
2a360 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2a370 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2a380 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
2a390 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
2a3a0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
2a3b0 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
2a3c0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
2a3d0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
2a3e0 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
2a3f0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2a400 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2a410 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2a420 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
2a430 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2a440 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2a450 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69  roy opcode).** i
2a460 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
2a470 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2a480 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2a490 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2a4a0 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2a4b0 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2a4c0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
2a4d0 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55  ex: {.  sqlite3U
2a4e0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
2a4f0 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
2a500 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2a510 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a520 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
2a530 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2a540 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2a550 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2a560 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2a570 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2a580 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
2a590 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2a5a0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2a5b0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2a5c0 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
2a5d0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2a5e0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2a5f0 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
2a600 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
2a610 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
2a620 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2a630 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
2a640 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
2a650 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
2a660 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
2a670 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
2a680 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2a690 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d  Trigger(db, pOp-
2a6a0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
2a6b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2a6c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a6d0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2a6e0 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  K./* Opcode: Int
2a6f0 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50  egrityCk P1 P2 P
2a700 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20  3 * P5.**.** Do 
2a710 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
2a720 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
2a730 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
2a740 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
2a750 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
2a760 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2a770 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
2a780 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
2a790 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
2a7a0 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
2a7b0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
2a7c0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
2a7d0 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
2a7e0 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
2a7f0 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
2a800 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
2a810 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
2a820 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
2a830 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
2a840 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
2a850 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
2a860 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
2a870 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
2a880 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
2a890 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
2a8a0 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
2a8b0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
2a8c0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
2a8d0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
2a8e0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
2a8f0 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
2a900 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  er.** stored in 
2a910 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31 2b  reg(P1), reg(P1+
2a920 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20 2e  1), reg(P1+2), .
2a930 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20 50  ...  There are P
2a940 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61  2 tables.** tota
2a950 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  l..**.** If P5 i
2a960 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
2a970 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
2a980 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2a990 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
2a9a0 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
2a9b0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
2a9c0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
2a9d0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
2a9e0 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
2a9f0 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
2aa00 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
2aa10 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
2aa20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
2aa30 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
2aa40 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
2aa50 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
2aa60 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
2aa70 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
2aa80 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
2aa90 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
2aaa0 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
2aab0 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
2aac0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
2aad0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  er */.  int nErr
2aae0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
2aaf0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
2ab00 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
2ab10 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
2ab20 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
2ab30 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
2ab40 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
2ab50 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
2ab60 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
2ab70 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
2ab80 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2ab90 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
2aba0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
2abb0 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20  rt( nRoot>0 );. 
2abc0 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33   aRoot = sqlite3
2abd0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
2abe0 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f  sizeof(int)*(nRo
2abf0 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20 61  ot+1) );.  if( a
2ac00 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Root==0 ) goto n
2ac10 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  o_mem;.  assert(
2ac20 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2ac30 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
2ac40 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2ac50 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
2ac60 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2ac70 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2ac80 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2ac90 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2aca0 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
2acb0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
2acc0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
2acd0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ace0 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f   for(j=0; j<nRoo
2acf0 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f  t; j++){.    aRo
2ad00 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c  ot[j] = (int)sql
2ad10 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
2ad20 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a  (&pIn1[j]);.  }.
2ad30 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a    aRoot[j] = 0;.
2ad40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ad50 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  5<db->nDb );.  a
2ad60 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2ad70 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2ad80 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20  pOp->p5) );.  z 
2ad90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2ada0 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d  tegrityCheck(db-
2adb0 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42  >aDb[pOp->p5].pB
2adc0 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c  t, aRoot, nRoot,
2add0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adf0 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e    (int)pnErr->u.
2ae00 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  i, &nErr);.  sql
2ae10 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
2ae20 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d 3e  Root);.  pnErr->
2ae30 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20 73  u.i -= nErr;.  s
2ae40 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2ae50 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66  Null(pIn1);.  if
2ae60 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20  ( nErr==0 ){.   
2ae70 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b   assert( z==0 );
2ae80 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d  .  }else if( z==
2ae90 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  0 ){.    goto no
2aea0 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _mem;.  }else{. 
2aeb0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2aec0 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c  mSetStr(pIn1, z,
2aed0 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
2aee0 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
2aef0 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
2af00 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
2af10 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  ;.  sqlite3VdbeC
2af20 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49  hangeEncoding(pI
2af30 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n1, encoding);. 
2af40 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2af50 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2af60 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
2af70 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  */../* Opcode: R
2af80 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a  owSetAdd P1 P2 *
2af90 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2afa0 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b  :  rowset(P1)=r[
2afb0 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  P2].**.** Insert
2afc0 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
2afd0 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
2afe0 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f  ter P2 into a bo
2aff0 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  olean index.** h
2b000 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
2b010 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
2b020 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
2b030 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
2b040 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2b050 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
2b060 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
2b070 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2b080 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2b090 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2b0a0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
2b0b0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
2b0c0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
2b0d0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2b0e0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2b0f0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2b100 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
2b110 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
2b120 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2b130 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
2b140 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2b150 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
2b160 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
2b170 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69  owSet, pIn2->u.i
2b180 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2b190 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2b1a0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
2b1b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
2b1c0 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29  r[P3]=rowset(P1)
2b1d0 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  .**.** Extract t
2b1e0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
2b1f0 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69  e from boolean i
2b200 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20  ndex P1 and put 
2b210 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a  that value into.
2b220 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  ** register P3. 
2b230 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20   Or, if boolean 
2b240 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74  index P1 is init
2b250 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
2b260 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
2b270 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
2b280 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
2b290 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2b2a0 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
2b2b0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33   jump, in1, out3
2b2c0 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a   */.  i64 val;..
2b2d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b2e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28  Op->p1];.  if( (
2b2f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2b300 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20  M_RowSet)==0 .  
2b310 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
2b320 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52  tNext(pIn1->u.pR
2b330 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a  owSet, &val)==0.
2b340 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20    ){.    /* The 
2b350 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73  boolean index is
2b360 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71   empty */.    sq
2b370 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2b380 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 70  ull(pIn1);.    p
2b390 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2b3a0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b3b0 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d 65 6c  aken(1,2);.  }el
2b3c0 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
2b3d0 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
2b3e0 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
2b3f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2b400 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2b410 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
2b420 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2b430 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d 0a 20  aken(0,2);.  }. 
2b440 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2b450 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
2b460 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
2b470 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
2b480 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2b490 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28  r[P3] in rowset(
2b4a0 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P1) goto P2.**.*
2b4b0 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
2b4c0 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64   assumed to hold
2b4d0 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
2b4e0 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69  r value. If regi
2b4f0 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61  ster P1.** conta
2b500 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  ins a RowSet obj
2b510 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77  ect and that Row
2b520 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61  Set object conta
2b530 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ins.** the value
2b540 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d   held in P3, jum
2b550 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  p to register P2
2b560 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73  . Otherwise, ins
2b570 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  ert the.** integ
2b580 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68  er in P3 into th
2b590 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e  e RowSet and con
2b5a0 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a  tinue on to the.
2b5b0 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a  ** next opcode..
2b5c0 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74  **.** The RowSet
2b5d0 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d   object is optim
2b5e0 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73  ized for the cas
2b5f0 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69  e where successi
2b600 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e  ve sets.** of in
2b610 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61  tegers, where ea
2b620 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
2b630 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45  no duplicates. E
2b640 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61  ach set.** of va
2b650 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69  lues is identifi
2b660 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50  ed by a unique P
2b670 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72  4 value. The fir
2b680 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68  st set.** must h
2b690 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66  ave P4==0, the f
2b6a0 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20  inal set P4=-1. 
2b6b0 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68   P4 must be eith
2b6c0 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d  er -1 or.** non-
2b6d0 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e  negative.  For n
2b6e0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
2b6f0 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68  es of P4 only th
2b700 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74  e lower 4.** bit
2b710 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e  s are significan
2b720 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  t..**.** This al
2b730 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
2b740 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
2b750 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
2b760 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
2b770 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74  he rowset object
2b780 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
2b790 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
2b7a0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
2b7b0 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
2b7c0 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
2b7d0 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
2b7e0 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
2b7f0 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
2b800 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
2b810 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
2b820 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
2b830 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
2b840 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
2b850 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
2b860 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
2b870 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
2b880 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
2b890 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
2b8a0 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
2b8b0 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
2b8c0 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
2b8d0 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
2b8e0 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
2b8f0 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
2b900 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
2b910 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b920 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
2b930 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78  t iSet;.  int ex
2b940 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  ists;..  pIn1 = 
2b950 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b960 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
2b970 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20  Op->p3];.  iSet 
2b980 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61  = pOp->p4.i;.  a
2b990 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
2b9a0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20  gs&MEM_Int );.. 
2b9b0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
2b9c0 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74  anything other t
2b9d0 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a  han a rowset obj
2b9e0 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  ect in memory ce
2b9f0 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65  ll P1,.  ** dele
2ba00 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e  te it now and in
2ba10 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68  itialize P1 with
2ba20 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74   an empty rowset
2ba30 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  .  */.  if( (pIn
2ba40 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2ba50 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2ba60 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ba70 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2ba80 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2ba90 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2baa0 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2bab0 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
2bac0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2bad0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
2bae0 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
2baf0 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
2bb00 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
2bb10 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
2bb20 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d  RowSetTest(pIn1-
2bb30 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74  >u.pRowSet, iSet
2bb40 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2bb50 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2bb60 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  n(exists!=0,2);.
2bb70 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
2bb80 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70  {.      pc = pOp
2bb90 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20  ->p2 - 1;.      
2bba0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
2bbb0 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29  .  if( iSet>=0 )
2bbc0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77  {.    sqlite3Row
2bbd0 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
2bbe0 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d  u.pRowSet, pIn3-
2bbf0 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
2bc00 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
2bc10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2bc20 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
2bc30 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
2bc40 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
2bc50 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72  cute the trigger
2bc60 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20   program passed 
2bc70 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53  as P4 (type P4_S
2bc80 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a  UBPROGRAM). .**.
2bc90 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74  ** P1 contains t
2bca0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
2bcb0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2bcc0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
2bcd0 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a  first memory .**
2bce0 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61   cell in an arra
2bcf0 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  y of values used
2bd00 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   as arguments to
2bd10 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
2bd20 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e  . P2 .** contain
2bd30 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f  s the address to
2bd40 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20   jump to if the 
2bd50 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f  sub-program thro
2bd60 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a  ws an IGNORE .**
2bd70 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67   exception using
2bd80 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e   the RAISE() fun
2bd90 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20  ction. Register 
2bda0 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
2bdb0 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61  address .** of a
2bdc0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
2bdd0 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74  this (the parent
2bde0 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65  ) VM that is use
2bdf0 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  d to allocate th
2be00 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71  e .** memory req
2be10 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62  uired by the sub
2be20 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65  -vdbe at runtime
2be30 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
2be40 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56  pointer to the V
2be50 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  M containing the
2be60 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
2be70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2be80 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2be90 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61  recursive progra
2bea0 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20  m invocation is 
2beb0 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65  enabled..*/.case
2bec0 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20   OP_Program: {  
2bed0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2bee0 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
2bef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2bf00 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72  mber of memory r
2bf10 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62  egisters for sub
2bf20 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
2bf30 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
2bf40 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
2bf50 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  f runtime space 
2bf60 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62  required for sub
2bf70 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65  -program */.  Me
2bf80 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20  m *pRt;         
2bf90 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
2bfa0 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75  r to allocate ru
2bfb0 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20  ntime space */. 
2bfc0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2bfd0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
2bfe0 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   to iterate thro
2bff0 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ugh memory cells
2c000 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b   */.  Mem *pEnd;
2c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2c020 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c   Last memory cel
2c030 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a  l in new array *
2c040 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
2c050 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  Frame;      /* N
2c060 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f  ew vdbe frame to
2c070 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20   execute in */. 
2c080 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
2c090 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d  ogram;   /* Sub-
2c0a0 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
2c0b0 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b  te */.  void *t;
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66  /* Token identif
2c0e0 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a  ying trigger */.
2c0f0 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f  .  pProgram = pO
2c100 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a  p->p4.pProgram;.
2c110 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f    pRt = &aMem[pO
2c120 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
2c130 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e  ( pProgram->nOp>
2c140 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20  0 );.  .  /* If 
2c150 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63  the p5 flag is c
2c160 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72  lear, then recur
2c170 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
2c180 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a  of triggers is .
2c190 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f    ** disabled fo
2c1a0 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
2c1b0 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73  atibility (p5 is
2c1c0 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62   set if this sub
2c1d0 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73  -program.  ** is
2c1e0 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65   really a trigge
2c1f0 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e  r, not a foreign
2c200 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64   key action, and
2c210 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20   the flag set.  
2c220 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62  ** and cleared b
2c230 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65  y the "PRAGMA re
2c240 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
2c250 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65  " command is cle
2c260 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ar)..  ** .  ** 
2c270 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20  It is recursive 
2c280 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
2c290 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53  iggers, at the S
2c2a0 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69  QL level, that i
2c2b0 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
2c2c0 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  . In some cases 
2c2d0 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
2c2e0 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f   may generate mo
2c2f0 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a  re than one .  *
2c300 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66  * SubProgram (if
2c310 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79   the trigger may
2c320 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74   be executed wit
2c330 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  h more than one 
2c340 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20  different .  ** 
2c350 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
2c360 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72  rithm). SubProgr
2c370 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73  am structures as
2c380 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a  sociated with a.
2c390 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67    ** single trig
2c3a0 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65  ger all have the
2c3b0 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
2c3c0 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74  the SubProgram.t
2c3d0 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61  oken .  ** varia
2c3e0 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  ble.  */.  if( p
2c3f0 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20  Op->p5 ){.    t 
2c400 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2c410 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  n;.    for(pFram
2c420 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
2c430 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74  ame && pFrame->t
2c440 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d  oken!=t; pFrame=
2c450 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
2c460 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65  ;.    if( pFrame
2c470 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
2c480 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d   if( p->nFrame>=
2c490 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
2c4a0 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
2c4b0 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63  DEPTH] ){.    rc
2c4c0 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
2c4d0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
2c4e0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
2c4f0 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e 79  g, db, "too many
2c500 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
2c510 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
2c520 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
2c530 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
2c540 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2c550 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
2c560 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
2c570 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
2c580 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
2c590 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
2c5a0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
2c5b0 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
2c5c0 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
2c5d0 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
2c5e0 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
2c5f0 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
2c600 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
2c610 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
2c620 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
2c630 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
2c640 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
2c650 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
2c660 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
2c670 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
2c680 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
2c690 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
2c6a0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
2c6b0 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
2c6c0 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
2c6d0 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
2c6e0 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
2c6f0 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
2c700 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
2c710 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
2c720 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
2c730 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
2c740 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
2c750 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
2c760 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
2c770 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
2c780 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
2c790 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
2c7a0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
2c7b0 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2c7c0 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
2c7d0 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
2c7e0 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
2c7f0 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
2c800 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
2c810 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
2c820 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
2c830 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29  of(VdbeCursor *)
2c840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2c850 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65   pProgram->nOnce
2c860 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20   * sizeof(u8);. 
2c870 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69     pFrame = sqli
2c880 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
2c890 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
2c8a0 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20  if( !pFrame ){. 
2c8b0 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
2c8c0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2c8d0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2c8e0 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d  e(pRt);.    pRt-
2c8f0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61  >flags = MEM_Fra
2c900 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70  me;.    pRt->u.p
2c910 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2c920 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
2c930 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
2c940 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
2c950 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
2c960 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
2c970 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
2c980 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a 20  rame->pc = pc;. 
2c990 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
2c9a0 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
2c9b0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
2c9c0 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
2c9d0 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
2c9e0 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
2c9f0 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
2ca00 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
2ca10 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
2ca20 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
2ca30 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
2ca40 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
2ca50 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
2ca60 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63      pFrame->aOnc
2ca70 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65  eFlag = p->aOnce
2ca80 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65  Flag;.    pFrame
2ca90 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->nOnceFlag = p-
2caa0 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a 20 20 20  >nOnceFlag;..   
2cab0 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
2cac0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
2cad0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
2cae0 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
2caf0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2cb00 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
2cb10 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
2cb20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
2cb30 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
2cb40 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
2cb50 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2cb60 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
2cb70 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
2cb80 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2cb90 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
2cba0 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
2cbb0 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20  nChildMem );.   
2cbc0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2cbd0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
2cbe0 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
2cbf0 20 20 61 73 73 65 72 74 28 20 70 63 3d 3d 70 46    assert( pc==pF
2cc00 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a  rame->pc );.  }.
2cc10 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a  .  p->nFrame++;.
2cc20 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e    pFrame->pParen
2cc30 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  t = p->pFrame;. 
2cc40 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77   pFrame->lastRow
2cc50 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
2cc60 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67    pFrame->nChang
2cc70 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a  e = p->nChange;.
2cc80 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
2cc90 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
2cca0 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
2ccb0 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65  m = aMem = &Vdbe
2ccc0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2ccd0 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20  [-1];.  p->nMem 
2cce0 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  = pFrame->nChild
2ccf0 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f  Mem;.  p->nCurso
2cd00 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d  r = (u16)pFrame-
2cd10 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d  >nChildCsr;.  p-
2cd20 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75  >apCsr = (VdbeCu
2cd30 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d  rsor **)&aMem[p-
2cd40 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61  >nMem+1];.  p->a
2cd50 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
2cd60 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
2cd70 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
2cd80 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  Op;.  p->aOnceFl
2cd90 61 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61  ag = (u8 *)&p->a
2cda0 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d  pCsr[p->nCursor]
2cdb0 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  ;.  p->nOnceFlag
2cdc0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   = pProgram->nOn
2cdd0 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20  ce;.  pc = -1;. 
2cde0 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65   memset(p->aOnce
2cdf0 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63  Flag, 0, p->nOnc
2ce00 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b  eFlag);..  break
2ce10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ce20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20  Param P1 P2 * * 
2ce30 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
2ce40 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72  ode is only ever
2ce50 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d   present in sub-
2ce60 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20  programs called 
2ce70 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50  via the .** OP_P
2ce80 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
2ce90 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65  on. Copy a value
2cea0 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65   currently store
2ceb0 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a  d in a memory .*
2cec0 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61  * cell of the ca
2ced0 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66  lling (parent) f
2cee0 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20  rame to cell P2 
2cef0 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  in the current f
2cf00 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73  rames .** addres
2cf10 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73  s space. This is
2cf20 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
2cf30 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63   programs to acc
2cf40 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a  ess the new.* .*
2cf50 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75  * and old.* valu
2cf60 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64  es..**.** The ad
2cf70 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c  dress of the cel
2cf80 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  l in the parent 
2cf90 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69  frame is determi
2cfa0 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a  ned by adding.**
2cfb0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2cfc0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2cfd0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2cfe0 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2cff0 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20   the.** calling 
2d000 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2d010 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2d020 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20  OP_Param: {     
2d030 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2d040 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
2d050 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2d060 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
2d070 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
2d080 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
2d090 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2d0a0 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
2d0b0 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
2d0c0 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
2d0d0 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
2d0e0 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
2d0f0 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
2d100 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
2d110 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d120 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
2d130 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d140 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
2d150 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
2d160 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d170 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
2d180 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
2d190 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
2d1a0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
2d1b0 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
2d1c0 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
2d1d0 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
2d1e0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2d1f0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2d200 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
2d210 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
2d220 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
2d230 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2d240 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
2d250 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
2d260 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
2d270 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2d280 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
2d290 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2d2a0 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
2d2b0 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
2d2c0 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
2d2d0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
2d2e0 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
2d2f0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2d300 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2d310 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
2d320 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
2d330 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
2d340 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
2d350 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
2d360 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
2d370 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d380 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
2d390 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
2d3a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2d3b0 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
2d3c0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
2d3d0 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
2d3e0 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
2d3f0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2d400 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
2d410 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
2d420 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2d430 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
2d440 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
2d450 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
2d460 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
2d470 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2d480 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
2d490 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2d4a0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2d4b0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
2d4c0 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
2d4d0 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
2d4e0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
2d4f0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
2d500 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
2d510 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
2d520 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
2d530 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
2d540 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
2d550 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
2d560 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2d570 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2d580 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
2d590 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
2d5a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
2d5b0 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2d5c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2d5d0 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
2d5e0 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
2d5f0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2d600 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
2d610 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
2d620 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2d630 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2d640 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
2d650 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
2d660 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
2d670 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2d680 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2d690 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
2d6a0 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43  .    if( p->nFkC
2d6b0 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2d6c0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2d6d0 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70  Cons==0 ) pc = p
2d6e0 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
2d6f0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2d700 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2d710 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2d720 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
2d730 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2d740 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
2d750 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
2d760 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2d770 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b  is: r[P1]=max(r[
2d780 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a  P1],r[P2]).**.**
2d790 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
2d7a0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
2d7b0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
2d7c0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
2d7d0 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
2d7e0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
2d7f0 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
2d800 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
2d810 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
2d820 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
2d830 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
2d840 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2d850 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
2d860 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
2d870 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
2d880 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2d890 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2d8a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2d8b0 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2d8c0 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
2d8d0 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
2d8e0 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
2d8f0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
2d900 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
2d910 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46  * in2 */.  VdbeF
2d920 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2d930 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
2d940 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2d950 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2d960 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
2d970 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2d980 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
2d990 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2d9a0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
2d9b0 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
2d9c0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
2d9d0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2d9e0 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
2d9f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2da00 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
2da10 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2da20 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
2da30 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2da40 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
2da50 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
2da60 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
2da70 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
2da80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2da90 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2daa0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2dab0 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
2dac0 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
2dad0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2dae0 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f  s: if r[P1]>0 go
2daf0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  to P2.**.** If t
2db00 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
2db10 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
2db20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70 20 74 6f  greater, jump to
2db30 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73   P2..**.** It is
2db40 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73 65 20   illegal to use 
2db50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2db60 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72 20 74   on a register t
2db70 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20  hat does.** not 
2db80 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
2db90 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74 69 6f  er.  An assertio
2dba0 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72 65 73  n fault will res
2dbb0 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79 2e 0a  ult if you try..
2dbc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
2dbd0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2dbe0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2dbf0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2dc00 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2dc10 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2dc20 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
2dc30 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
2dc40 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
2dc50 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
2dc60 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2dc70 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2dc80 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2dc90 49 66 4e 65 67 20 50 31 20 50 32 20 50 33 20 2a  IfNeg P1 P2 P3 *
2dca0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2dcb0 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b  r[P1]+=P3, if r[
2dcc0 50 31 5d 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  P1]<0 goto P2.**
2dcd0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
2dce0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2dcf0 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 6c 69  integer.  Add li
2dd00 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68 65 20  teral P3 to the 
2dd10 76 61 6c 75 65 20 69 6e 0a 2a 2a 20 72 65 67 69  value in.** regi
2dd20 73 74 65 72 20 50 31 20 74 68 65 6e 20 69 66 20  ster P1 then if 
2dd30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67  the value of reg
2dd40 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
2dd50 20 74 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70   than zero, jump
2dd60 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65   to P2. .*/.case
2dd70 20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20   OP_IfNeg: {    
2dd80 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2dd90 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2dda0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2ddb0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2ddc0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2ddd0 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
2dde0 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e  ->p3;.  VdbeBran
2ddf0 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
2de00 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i<0, 2);.  if( p
2de10 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20 20  In1->u.i<0 ){.  
2de20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
2de30 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  - 1;.  }.  break
2de40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2de50 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20  IfZero P1 P2 P3 
2de60 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2de70 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20 72   r[P1]+=P3, if r
2de80 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a  [P1]==0 goto P2.
2de90 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
2dea0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
2deb0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2dec0 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20 74  Add literal P3 t
2ded0 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  o the.** value i
2dee0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
2def0 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  If the result is
2df00 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d 70   exactly 0, jump
2df10 20 74 6f 20 50 32 2e 20 0a 2a 2f 0a 63 61 73 65   to P2. .*/.case
2df20 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20 20 20   OP_IfZero: {   
2df30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2df40 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
2df50 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2df60 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
2df70 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
2df80 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f   pIn1->u.i += pO
2df90 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42 72 61  p->p3;.  VdbeBra
2dfa0 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2dfb0 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
2dfc0 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b   pIn1->u.i==0 ){
2dfd0 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2dfe0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2dff0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e000 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
2e010 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2e020 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
2e030 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
2e040 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2e050 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2e060 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2e070 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
2e080 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
2e090 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
2e0a0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
2e0b0 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63 74  uncDef.** struct
2e0c0 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69  ure that specifi
2e0d0 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  es the function.
2e0e0 20 20 55 73 65 20 72 65 67 69 73 74 65 72 0a 2a    Use register.*
2e0f0 2a 20 50 33 20 61 73 20 74 68 65 20 61 63 63 75  * P3 as the accu
2e100 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
2e110 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
2e120 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
2e130 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
2e140 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
2e150 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2e160 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
2e170 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
2e180 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52  *pMem;.  Mem *pR
2e190 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ec;.  sqlite3_co
2e1a0 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73 71 6c  ntext ctx;.  sql
2e1b0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 56  ite3_value **apV
2e1c0 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  al;..  n = pOp->
2e1d0 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p5;.  assert( n>
2e1e0 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 26  =0 );.  pRec = &
2e1f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2e200 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
2e210 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
2e220 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
2e230 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
2e240 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20 20 20  +, pRec++){.    
2e250 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2e260 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
2e270 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65 63 3b  apVal[i] = pRec;
2e280 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
2e290 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29 3b 0a  hange(p, pRec);.
2e2a0 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e 63 20    }.  ctx.pFunc 
2e2b0 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
2e2c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e2d0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2e2e0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
2e2f0 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78 2e 70  rsor) );.  ctx.p
2e300 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26 61 4d  Mem = pMem = &aM
2e310 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
2e320 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e  Mem->n++;.  ctx.
2e330 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  s.flags = MEM_Nu
2e340 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20 3d 20  ll;.  ctx.s.z = 
2e350 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c  0;.  ctx.s.zMall
2e360 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e  oc = 0;.  ctx.s.
2e370 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74 78 2e  xDel = 0;.  ctx.
2e380 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63 74 78  s.db = db;.  ctx
2e390 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20  .isError = 0;.  
2e3a0 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20  ctx.pColl = 0;. 
2e3b0 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 3d 20   ctx.skipFlag = 
2e3c0 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46 75  0;.  if( ctx.pFu
2e3d0 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
2e3e0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
2e3f0 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73 65  COLL ){.    asse
2e400 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70 20 29  rt( pOp>p->aOp )
2e410 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
2e420 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
2e430 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
2e440 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
2e450 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
2e460 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
2e470 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
2e480 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63  .pColl;.  }.  (c
2e490 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65 70 29  tx.pFunc->xStep)
2e4a0 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
2e4b0 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
2e4c0 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
2e4d0 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
2e4e0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2e4f0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2e500 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2e510 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
2e520 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72 63 20  ctx.s));.    rc 
2e530 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20  = ctx.isError;. 
2e540 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69   }.  if( ctx.ski
2e550 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73  pFlag ){.    ass
2e560 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
2e570 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
2e580 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d  );.    i = pOp[-
2e590 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69  1].p1;.    if( i
2e5a0 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
2e5b0 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
2e5c0 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20 20 73  i], 1);.  }..  s
2e5d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2e5e0 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 0a 20  ease(&ctx.s);.. 
2e5f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2e600 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
2e610 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
2e620 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
2e630 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20  [P1] N=P2.**.** 
2e640 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61  Execute the fina
2e650 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66  lizer function f
2e660 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
2e670 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d    P1 is.** the m
2e680 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
2e690 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d  hat is the accum
2e6a0 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61  ulator for the a
2e6b0 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ggregate..**.** 
2e6c0 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
2e6d0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68   of arguments th
2e6e0 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  at the step func
2e6f0 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a  tion takes and.*
2e700 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
2e710 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
2e720 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69   for this functi
2e730 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61  on.  The P2.** a
2e740 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75  rgument is not u
2e750 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
2e760 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20  de.  It is only 
2e770 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69  there to disambi
2e780 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f  guate.** functio
2e790 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65  ns that can take
2e7a0 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73   varying numbers
2e7b0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
2e7c0 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65  The.** P4 argume
2e7d0 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65  nt is only neede
2e7e0 64 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65  d for the degene
2e7f0 72 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a  rate case where.
2e800 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  ** the step func
2e810 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65  tion was not pre
2e820 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a  viously called..
2e830 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69  */.case OP_AggFi
2e840 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  nal: {.  Mem *pM
2e850 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
2e860 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
2e870 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
2e880 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d  nCursor) );.  pM
2e890 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2e8a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
2e8b0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
2e8c0 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
2e8d0 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
2e8e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
2e8f0 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
2e900 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
2e910 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
2e920 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2e930 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
2e940 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
2e950 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a  ue_text(pMem));.
2e960 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
2e970 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2e980 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pMem, encoding);
2e990 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2e9a0 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20  OBSIZE(pMem);.  
2e9b0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
2e9c0 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29  emTooBig(pMem) )
2e9d0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
2e9e0 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
2e9f0 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
2ea00 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f  TE_OMIT_WAL./* O
2ea10 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e  pcode: Checkpoin
2ea20 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
2ea30 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20  *.** Checkpoint 
2ea40 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69  database P1. Thi
2ea50 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  s is a no-op if 
2ea60 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  P1 is not curren
2ea70 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f  tly in.** WAL mo
2ea80 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32  de. Parameter P2
2ea90 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   is one of SQLIT
2eaa0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2eab0 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72  SIVE, FULL.** or
2eac0 20 52 45 53 54 41 52 54 2e 20 20 57 72 69 74 65   RESTART.  Write
2ead0 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d   1 or 0 into mem
2eae0 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63  [P3] if the chec
2eaf0 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a  kpoint returns.*
2eb00 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72  * SQLITE_BUSY or
2eb10 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65   not, respective
2eb20 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e  ly.  Write the n
2eb30 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
2eb40 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74  n the.** WAL aft
2eb50 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
2eb60 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d  t into mem[P3+1]
2eb70 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
2eb80 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74  of pages.** in t
2eb90 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65  he WAL that have
2eba0 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
2ebb0 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65  ed after the che
2ebc0 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c  ckpoint.** compl
2ebd0 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  etes into mem[P3
2ebe0 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e  +2].  However on
2ebf0 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50   an error, mem[P
2ec00 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b  3+1] and.** mem[
2ec10 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61  P3+2] are initia
2ec20 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a  lized to -1..*/.
2ec30 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69  case OP_Checkpoi
2ec40 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20  nt: {.  int i;  
2ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec60 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
2ec70 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
2ec80 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20   aRes[3];       
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2eca0 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d  Results */.  Mem
2ecb0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ecd0 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65  Write results he
2ece0 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  re */..  assert(
2ecf0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2ed00 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30  );.  aRes[0] = 0
2ed10 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52  ;.  aRes[1] = aR
2ed20 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73  es[2] = -1;.  as
2ed30 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  sert( pOp->p2==S
2ed40 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
2ed50 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20  _PASSIVE.       
2ed60 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
2ed70 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
2ed80 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  LL.       || pOp
2ed90 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2eda0 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a  CKPOINT_RESTART.
2edb0 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
2edc0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
2edd0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2ede0 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
2edf0 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
2ee00 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
2ee10 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2ee20 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30  E_OK;.    aRes[0
2ee30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72  ] = 1;.  }.  for
2ee40 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d  (i=0, pMem = &aM
2ee50 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33  em[pOp->p3]; i<3
2ee60 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a  ; i++, pMem++){.
2ee70 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2ee80 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
2ee90 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a   (i64)aRes[i]);.
2eea0 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b    }    .  break;
2eeb0 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69  .};  .#endif..#i
2eec0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2eed0 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f  T_PRAGMA./* Opco
2eee0 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20  de: JournalMode 
2eef0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2ef00 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f  ** Change the jo
2ef10 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61  urnal mode of da
2ef20 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e  tabase P1 to P3.
2ef30 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20   P3 must be one 
2ef40 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f  of the.** PAGER_
2ef50 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
2ef60 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67  values. If chang
2ef70 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20  ing between the 
2ef80 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b  various rollback
2ef90 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74  .** modes (delet
2efa0 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72  e, truncate, per
2efb0 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65  sist, off and me
2efc0 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61  mory), this is a
2efd0 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61   simple.** opera
2efe0 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72  tion. No IO is r
2eff0 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  equired..**.** I
2f000 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20  f changing into 
2f010 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f  or out of WAL mo
2f020 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  de the procedure
2f030 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
2f040 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ated..**.** Writ
2f050 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  e a string conta
2f060 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  ining the final 
2f070 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20  journal-mode to 
2f080 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
2f090 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d  case OP_JournalM
2f0a0 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74  ode: {    /* out
2f0b0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
2f0c0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
2f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0e0 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
2f0f0 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
2f100 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
2f110 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
2f120 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
2f130 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
2f140 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
2f150 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
2f160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2f170 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
2f180 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
2f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1a0 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
2f1b0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
2f1c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f1d0 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
2f1e0 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
2f1f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
2f200 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
2f210 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
2f220 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65 77 20  .#endif..  eNew 
2f230 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
2f240 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52  ert( eNew==PAGER
2f250 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
2f260 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ETE .       || e
2f270 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
2f280 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20  ALMODE_TRUNCATE 
2f290 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2f2a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f2b0 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20  DE_PERSIST .    
2f2c0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2f2d0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
2f2e0 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  F.       || eNew
2f2f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f300 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20  ODE_MEMORY.     
2f310 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
2f320 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2f330 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2f340 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2f350 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20  DE_QUERY.  );.  
2f360 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2f370 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
2f380 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2f390 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2f3a0 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62  0 );..  pBt = db
2f3b0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
2f3c0 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73  Bt;.  pPager = s
2f3d0 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
2f3e0 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20  (pBt);.  eOld = 
2f3f0 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a  sqlite3PagerGetJ
2f400 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
2f410 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d  r);.  if( eNew==
2f420 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2f430 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d  E_QUERY ) eNew =
2f440 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71   eOld;.  if( !sq
2f450 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68  lite3PagerOkToCh
2f460 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  angeJournalMode(
2f470 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d  pPager) ) eNew =
2f480 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20   eOld;..#ifndef 
2f490 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2f4a0 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71    zFilename = sq
2f4b0 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61  lite3PagerFilena
2f4c0 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a  me(pPager, 1);..
2f4d0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f    /* Do not allo
2f4e0 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74  w a transition t
2f4f0 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  o journal_mode=W
2f500 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  AL for a databas
2f510 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72  e.  ** in tempor
2f520 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69  ary storage or i
2f530 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e  f the VFS does n
2f540 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65  ot support share
2f550 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20  d memory .  */. 
2f560 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52   if( eNew==PAGER
2f570 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2f580 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53  .   && (sqlite3S
2f590 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d  trlen30(zFilenam
2f5a0 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20  e)==0           
2f5b0 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a  /* Temp file */.
2f5c0 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74         || !sqlit
2f5d0 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72  e3PagerWalSuppor
2f5e0 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f  ted(pPager))   /
2f5f0 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f  * No shared-memo
2f600 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20  ry support */.  
2f610 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f  ){.    eNew = eO
2f620 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28  ld;.  }..  if( (
2f630 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26  eNew!=eOld).   &
2f640 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  & (eOld==PAGER_J
2f650 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c  OURNALMODE_WAL |
2f660 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2f670 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20  URNALMODE_WAL). 
2f680 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d   ){.    if( !db-
2f690 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64  >autoCommit || d
2f6a0 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29  b->nVdbeRead>1 )
2f6b0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
2f6c0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
2f6d0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2f6e0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2f6f0 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20 22 63  b, .          "c
2f700 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
2f710 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
2f720 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
2f730 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
2f740 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2f750 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
2f760 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
2f770 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
2f780 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c 73 65  break;.    }else
2f790 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f  {. .      if( eO
2f7a0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2f7b0 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
2f7c0 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69       /* If leavi
2f7d0 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f  ng WAL mode, clo
2f7e0 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  se the log file.
2f7f0 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   If successful, 
2f800 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20  the call.       
2f810 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73   ** to PagerClos
2f820 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e  eWal() checkpoin
2f830 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74  ts and deletes t
2f840 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c  he write-ahead-l
2f850 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  og .        ** f
2f860 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56  ile. An EXCLUSIV
2f870 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c  E lock may still
2f880 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20   be held on the 
2f890 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20  database file . 
2f8a0 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20         ** after 
2f8b0 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74  a successful ret
2f8c0 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f  urn. .        */
2f8d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
2f8e0 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57  lite3PagerCloseW
2f8f0 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  al(pPager);.    
2f900 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2f910 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
2f920 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
2f930 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2f940 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20  ager, eNew);.   
2f950 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
2f960 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47  se if( eOld==PAG
2f970 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
2f980 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20  EMORY ){.       
2f990 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73   /* Cannot trans
2f9a0 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66  ition directly f
2f9b0 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41  rom MEMORY to WA
2f9c0 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46  L.  Use mode OFF
2f9d0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61  .        ** as a
2f9e0 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a  n intermediate *
2f9f0 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
2fa00 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
2fa10 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41 47  Mode(pPager, PAG
2fa20 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
2fa30 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  FF);.      }.  .
2fa40 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20        /* Open a 
2fa50 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
2fa60 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2fa70 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
2fa80 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  the journal.    
2fa90 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20    ** mode, this 
2faa0 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61  transaction alwa
2fab0 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61  ys uses a rollba
2fac0 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20  ck journal..    
2fad0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
2fae0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
2faf0 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30  sInTrans(pBt)==0
2fb00 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63   );.      if( rc
2fb10 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2fb20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
2fb30 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73 69  te3BtreeSetVersi
2fb40 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50  on(pBt, (eNew==P
2fb50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2fb60 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a  _WAL ? 2 : 1));.
2fb70 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2fb80 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64  }.#endif /* ifnd
2fb90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2fba0 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20  AL */..  if( rc 
2fbb0 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f  ){.    eNew = eO
2fbc0 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77 20 3d  ld;.  }.  eNew =
2fbd0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
2fbe0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2fbf0 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f  er, eNew);..  pO
2fc00 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
2fc10 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p2];.  pOut->fla
2fc20 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
2fc30 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
2fc40 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63  ;.  pOut->z = (c
2fc50 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75  har *)sqlite3Jou
2fc60 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65  rnalModename(eNe
2fc70 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  w);.  pOut->n = 
2fc80 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2fc90 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74  pOut->z);.  pOut
2fca0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
2fcb0 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  TF8;.  sqlite3Vd
2fcc0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2fcd0 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
2fce0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65  ;.  break;.};.#e
2fcf0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2fd00 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23  MIT_PRAGMA */..#
2fd10 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2fd20 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20  TE_OMIT_VACUUM) 
2fd30 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
2fd40 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a  TE_OMIT_ATTACH).
2fd50 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75  /* Opcode: Vacuu
2fd60 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  m * * * * *.**.*
2fd70 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74  * Vacuum the ent
2fd80 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  ire database.  T
2fd90 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
2fda0 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74  cause other virt
2fdb0 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20  ual.** machines 
2fdc0 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e  to be created an
2fdd0 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e  d run.  It may n
2fde0 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f  ot be called fro
2fdf0 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72  m within.** a tr
2fe00 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  ansaction..*/.ca
2fe10 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a  se OP_Vacuum: {.
2fe20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2fe30 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63  dOnly==0 );.  rc
2fe40 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
2fe50 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
2fe60 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   db);.  break;.}
2fe70 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
2fe80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2fe90 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a  T_AUTOVACUUM)./*
2fea0 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63   Opcode: IncrVac
2feb0 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  uum P1 P2 * * *.
2fec0 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20  **.** Perform a 
2fed0 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74  single step of t
2fee0 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  he incremental v
2fef0 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20  acuum procedure 
2ff00 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74  on.** the P1 dat
2ff10 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61  abase. If the va
2ff20 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65  cuum has finishe
2ff30 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  d, jump to instr
2ff40 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74  uction.** P2. Ot
2ff50 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
2ff60 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2ff70 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2ff80 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61  /.case OP_IncrVa
2ff90 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  cuum: {        /
2ffa0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65  * jump */.  Btre
2ffb0 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
2ffc0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2ffd0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2ffe0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2fff0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
30000 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
30010 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
30020 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
30030 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
30040 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72  Op->p1].pBt;.  r
30050 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
30060 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b  IncrVacuum(pBt);
30070 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
30080 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  en(rc==SQLITE_DO
30090 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  NE,2);.  if( rc=
300a0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
300b0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
300c0 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   - 1;.    rc = S
300d0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20  QLITE_OK;.  }.  
300e0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
300f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69  ./* Opcode: Expi
30100 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  re P1 * * * *.**
30110 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d  .** Cause precom
30120 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
30130 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65   to expire.  Whe
30140 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61  n an expired sta
30150 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65  tement.** is exe
30160 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  cuted using sqli
30170 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69  te3_step() it wi
30180 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61  ll either automa
30190 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65  tically.** repre
301a0 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20  pare itself (if 
301b0 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  it was originall
301c0 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  y created using 
301d0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
301e0 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77  v2()).** or it w
301f0 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51  ill fail with SQ
30200 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20  LITE_SCHEMA..** 
30210 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
30220 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
30230 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
30240 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
30250 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
30260 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
30270 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
30280 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70  statement is exp
30290 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ired..*/.case OP
302a0 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28  _Expire: {.  if(
302b0 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20   !pOp->p1 ){.   
302c0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
302d0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
302e0 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  (db);.  }else{. 
302f0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
30300 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
30310 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
30320 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
30330 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  CHE./* Opcode: T
30340 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50  ableLock P1 P2 P
30350 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
30360 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d  is: iDb=P1 root=
30370 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a  P2 write=P3.**.*
30380 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20  * Obtain a lock 
30390 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  on a particular 
303a0 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74  table. This inst
303b0 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  ruction is only 
303c0 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65  used when.** the
303d0 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65   shared-cache fe
303e0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
303f0 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  . .**.** P1 is t
30400 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
30410 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69  database in sqli
30420 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65  te3.aDb[] of the
30430 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20   database.** on 
30440 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69  which the lock i
30450 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72  s acquired.  A r
30460 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69  eadlock is obtai
30470 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a  ned if P3==0 or.
30480 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20  ** a write lock 
30490 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20  if P3==1..**.** 
304a0 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P2 contains the 
304b0 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
304c0 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a   table to lock..
304d0 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e  **.** P4 contain
304e0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
304f0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
30500 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65  able being locke
30510 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a  d. This is only.
30520 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  ** used to gener
30530 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ate an error mes
30540 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b  sage if the lock
30550 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69   cannot be obtai
30560 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ned..*/.case OP_
30570 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75  TableLock: {.  u
30580 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20  8 isWriteLock = 
30590 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69  (u8)pOp->p3;.  i
305a0 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
305b0 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
305c0 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
305d0 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
305e0 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
305f0 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
30600 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
30610 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
30620 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
30630 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b  treeMask, p1) );
30640 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57  .    assert( isW
30650 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69  riteLock==0 || i
30660 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b  sWriteLock==1 );
30670 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
30680 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28  3BtreeLockTable(
30690 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c  db->aDb[p1].pBt,
306a0 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74   pOp->p2, isWrit
306b0 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20  eLock);.    if( 
306c0 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54  (rc&0xFF)==SQLIT
306d0 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20  E_LOCKED ){.    
306e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20    const char *z 
306f0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20  = pOp->p4.z;.   
30700 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
30710 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
30720 20 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 74   db, "database t
30730 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20  able is locked: 
30740 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20  %s", z);.    }. 
30750 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
30760 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
30770 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
30780 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
30790 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
307a0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
307b0 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34   VBegin * * * P4
307c0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20   *.**.** P4 may 
307d0 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  be a pointer to 
307e0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
307f0 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f  structure. If so
30800 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78  , call the .** x
30810 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72  Begin method for
30820 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a   that table..**.
30830 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72  ** Also, whether
30840 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65   or not P4 is se
30850 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68  t, check that th
30860 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20  is is not being 
30870 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77  called from.** w
30880 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b  ithin a callback
30890 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
308a0 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68  ble xSync() meth
308b0 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68  od. If it is, th
308c0 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20  e error.** code 
308d0 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53  will be set to S
308e0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f  QLITE_LOCKED..*/
308f0 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a  .case OP_VBegin:
30900 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54   {.  VTable *pVT
30910 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f  ab;.  pVTab = pO
30920 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72  p->p4.pVtab;.  r
30930 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42  c = sqlite3VtabB
30940 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b  egin(db, pVTab);
30950 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73  .  if( pVTab ) s
30960 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
30970 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d  Errmsg(p, pVTab-
30980 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b  >pVtab);.  break
30990 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
309a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
309b0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
309c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
309d0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
309e0 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50  pcode: VCreate P
309f0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
30a00 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20   P4 is the name 
30a10 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
30a20 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  le in database P
30a30 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65  1. Call the xCre
30a40 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f  ate method.** fo
30a50 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
30a60 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
30a70 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  : {.  rc = sqlit
30a80 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
30a90 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
30aa0 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72  p->p4.z, &p->zEr
30ab0 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  rMsg);.  break;.
30ac0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
30ad0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30ae0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
30af0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30b00 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
30b10 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
30b20 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
30b30 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
30b40 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
30b50 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
30b60 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
30b70 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
30b80 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
30b90 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
30ba0 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  y: {.  p->inVtab
30bb0 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20 72 63  Method = 2;.  rc
30bc0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
30bd0 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f  llDestroy(db, pO
30be0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
30bf0 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  );.  p->inVtabMe
30c00 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72 65 61  thod = 0;.  brea
30c10 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30c20 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
30c30 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
30c40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30c50 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
30c60 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
30c70 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
30c80 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
30c90 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
30ca0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
30cb0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
30cc0 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
30cd0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
30ce0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
30cf0 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
30d00 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
30d10 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
30d20 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
30d30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
30d40 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
30d50 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
30d60 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
30d70 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20  *pVtabCursor;.  
30d80 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
30d90 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
30da0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
30db0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
30dc0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75  sReader );.  pCu
30dd0 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75  r = 0;.  pVtabCu
30de0 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61  rsor = 0;.  pVta
30df0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
30e00 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  b->pVtab;.  pMod
30e10 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f 6d  ule = (sqlite3_m
30e20 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e 70  odule *)pVtab->p
30e30 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
30e40 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64 75 6c  (pVtab && pModul
30e50 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75  e);.  rc = pModu
30e60 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c  le->xOpen(pVtab,
30e70 20 26 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a   &pVtabCursor);.
30e80 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
30e90 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
30ea0 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54  ab);.  if( SQLIT
30eb0 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20  E_OK==rc ){.    
30ec0 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
30ed0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
30ee0 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
30ef0 20 20 20 20 70 56 74 61 62 43 75 72 73 6f 72 2d      pVtabCursor-
30f00 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a  >pVtab = pVtab;.
30f10 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
30f20 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f  ze vdbe cursor o
30f30 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70 43 75  bject */.    pCu
30f40 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
30f50 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  or(p, pOp->p1, 0
30f60 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20 69 66  , -1, 0);.    if
30f70 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20 20 20  ( pCur ){.      
30f80 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
30f90 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f 72 3b  r = pVtabCursor;
30fa0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
30fb0 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
30fc0 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 4d  ed = 1;.      pM
30fd0 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
30fe0 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  tabCursor);.    
30ff0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
31000 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
31010 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31020 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
31030 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
31040 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
31050 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50  de: VFilter P1 P
31060 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
31070 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50  opsis: iplan=r[P
31080 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a  3] zplan='P4'.**
31090 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73  .** P1 is a curs
310a0 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  or opened using 
310b0 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e  VOpen.  P2 is an
310c0 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
310d0 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69   to if.** the fi
310e0 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65  ltered result se
310f0 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a  t is empty..**.*
31100 2a 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e  * P4 is either N
31110 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20  ULL or a string 
31120 74 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74  that was generat
31130 65 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49  ed by the xBestI
31140 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  ndex.** method o
31150 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54  f the module.  T
31160 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  he interpretatio
31170 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69  n of the P4 stri
31180 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f  ng is left.** to
31190 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c   the module impl
311a0 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ementation..**.*
311b0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
311c0 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65  vokes the xFilte
311d0 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20  r method on the 
311e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70  virtual table sp
311f0 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31  ecified.** by P1
31200 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71  .  The integer q
31210 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65  uery plan parame
31220 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69  ter to xFilter i
31230 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
31240 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69  ster.** P3. Regi
31250 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73  ster P3+1 stores
31260 20 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65   the argc parame
31270 74 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64  ter to be passed
31280 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74   to the.** xFilt
31290 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73  er method. Regis
312a0 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b  ters P3+2..P3+1+
312b0 61 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67  argc are the arg
312c0 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  c.** additional 
312d0 70 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68  parameters which
312e0 20 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a   are passed to.*
312f0 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67  * xFilter as arg
31300 76 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32  v. Register P3+2
31310 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d   becomes argv[0]
31320 20 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20   when passed to 
31330 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41  xFilter..**.** A
31340 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
31350 20 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c   P2 if the resul
31360 74 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74  t set after filt
31370 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65  ering would be e
31380 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  mpty..*/.case OP
31390 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a  _VFilter: {   /*
313a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
313b0 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72  Arg;.  int iQuer
313c0 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  y;.  const sqlit
313d0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
313e0 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72  le;.  Mem *pQuer
313f0 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b  y;.  Mem *pArgc;
31400 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
31410 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
31420 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
31430 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
31440 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
31450 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
31460 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
31470 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
31480 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
31490 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79   pArgc = &pQuery
314a0 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  [1];.  pCur = p-
314b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
314c0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
314d0 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b  Valid(pQuery) );
314e0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
314f0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
31500 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
31510 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
31520 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  );.  pVtabCursor
31530 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
31540 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  rsor;.  pVtab = 
31550 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
31560 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
31570 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
31580 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
31590 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
315a0 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
315b0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
315c0 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
315d0 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
315e0 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
315f0 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
31600 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
31610 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
31620 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
31630 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
31640 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
31650 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20  {.    res = 0;. 
31660 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70     apArg = p->ap
31670 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69 20 3d  Arg;.    for(i =
31680 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   0; i<nArg; i++)
31690 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d  {.      apArg[i]
316a0 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a   = &pArgc[i+1];.
316b0 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e      }..    p->in
316c0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a  VtabMethod = 1;.
316d0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
316e0 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62 43  ->xFilter(pVtabC
316f0 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20 70  ursor, iQuery, p
31700 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
31710 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d 3e 69  apArg);.    p->i
31720 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
31730 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62  .    sqlite3Vtab
31740 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
31750 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20  pVtab);.    if( 
31760 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
31770 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70 4d 6f  .      res = pMo
31780 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74 61 62  dule->xEof(pVtab
31790 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
317a0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
317b0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
317c0 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
317d0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
317e0 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  - 1;.    }.  }. 
317f0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
31800 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a   0;..  break;.}.
31810 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
31820 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
31830 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
31840 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31850 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
31860 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32  e: VColumn P1 P2
31870 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
31880 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75  sis: r[P3]=vcolu
31890 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  mn(P2).**.** Sto
318a0 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  re the value of 
318b0 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
318c0 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f   of.** the row o
318d0 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61  f the virtual-ta
318e0 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a  ble that the .**
318f0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f   P1 cursor is po
31900 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72  inting to into r
31910 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
31920 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20  ase OP_VColumn: 
31930 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
31940 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
31950 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
31960 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
31970 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65  *pDest;.  sqlite
31980 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65  3_context sConte
31990 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f  xt;..  VdbeCurso
319a0 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  r *pCur = p->apC
319b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
319c0 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74  ssert( pCur->pVt
319d0 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  abCursor );.  as
319e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
319f0 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
31a00 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
31a10 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
31a20 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
31a30 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
31a40 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66  (p, pDest);.  if
31a50 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
31a60 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
31a70 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
31a80 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
31a90 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
31aa0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d  ur->pVtabCursor-
31ab0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
31ac0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
31ad0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
31ae0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
31af0 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
31b00 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
31b10 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20 20 2f  sContext));..  /
31b20 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c  * The output cel
31b30 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61  l may already ha
31b40 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f  ve a buffer allo
31b50 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a  cated. Move.  **
31b60 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6e   the current con
31b70 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74 65 78  tents to sContex
31b80 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20 74  t.s so in case t
31b90 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e  he user-function
31ba0 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65 20 74   .  ** can use t
31bb0 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
31bc0 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
31bd0 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
31be0 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e  g a .  ** new on
31bf0 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  e..  */.  sqlite
31c00 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73 43  3VdbeMemMove(&sC
31c10 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73 74 29  ontext.s, pDest)
31c20 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
31c30 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20  ag(&sContext.s, 
31c40 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63  MEM_Null);..  rc
31c50 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c   = pModule->xCol
31c60 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61 62 43  umn(pCur->pVtabC
31c70 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65 78 74  ursor, &sContext
31c80 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
31c90 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
31ca0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
31cb0 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
31cc0 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
31cd0 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
31ce0 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
31cf0 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
31d00 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
31d10 74 6f 20 74 68 65 20 50 33 20 72 65 67 69 73 74  to the P3 regist
31d20 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f 20 74  er. We.  ** do t
31d30 68 69 73 20 72 65 67 61 72 64 6c 65 73 73 20 6f  his regardless o
31d40 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
31d50 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 72   an error occurr
31d60 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61 6e 79  ed to ensure any
31d70 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20 61 6c  .  ** dynamic al
31d80 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43 6f 6e  location in sCon
31d90 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20 73 74  text.s (a Mem st
31da0 72 75 63 74 29 20 69 73 20 20 72 65 6c 65 61 73  ruct) is  releas
31db0 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  ed..  */.  sqlit
31dc0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
31dd0 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74 2e 73  ding(&sContext.s
31de0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 73  , encoding);.  s
31df0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
31e00 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e 74 65  e(pDest, &sConte
31e10 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53 54 45  xt.s);.  REGISTE
31e20 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
31e30 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54   pDest);.  UPDAT
31e40 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
31e50 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71  Dest);..  if( sq
31e60 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
31e70 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
31e80 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
31e90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
31ea0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
31eb0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
31ec0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
31ed0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
31ee0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
31ef0 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
31f00 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
31f10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
31f20 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
31f30 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
31f40 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
31f50 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
31f60 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
31f70 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
31f80 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
31f90 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
31fa0 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
31fb0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
31fc0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
31fd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
31fe0 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
31ff0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
32000 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
32010 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
32020 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
32030 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
32040 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
32050 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
32060 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
32070 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
32080 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b  ->pVtabCursor );
32090 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
320a0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
320b0 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
320c0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
320d0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
320e0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
320f0 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
32100 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
32110 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
32120 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
32130 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
32140 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
32150 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
32160 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
32170 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
32180 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
32190 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
321a0 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
321b0 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
321c0 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
321d0 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
321e0 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
321f0 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
32200 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
32210 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
32220 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
32230 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
32240 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
32250 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
32260 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
32270 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
32280 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
32290 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 70  od = 1;.  rc = p
322a0 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
322b0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29  ur->pVtabCursor)
322c0 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74  ;.  p->inVtabMet
322d0 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  hod = 0;.  sqlit
322e0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
322f0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
32300 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
32310 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d 20 70  K ){.    res = p
32320 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
32330 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b  r->pVtabCursor);
32340 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
32350 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a  hTaken(!res,2);.
32360 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
32370 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
32380 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
32390 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20 70 4f  2 */.    pc = pO
323a0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
323b0 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
323c0 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e  interrupt;.}.#en
323d0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
323e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
323f0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
32400 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
32410 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
32420 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
32430 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
32440 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
32450 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
32460 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
32470 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
32480 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
32490 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
324a0 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
324b0 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
324c0 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
324d0 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
324e0 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
324f0 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
32500 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
32510 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
32520 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
32530 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
32540 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
32550 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
32560 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
32570 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
32580 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
32590 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
325a0 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
325b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
325c0 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  e) );.  assert( 
325d0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
325e0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
325f0 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
32600 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
32610 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
32620 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61  _Str );.  testca
32630 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
32640 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
32650 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
32660 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
32670 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63  F16BE );.  testc
32680 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
32690 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
326a0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
326b0 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
326c0 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54  ing(pName, SQLIT
326d0 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72  E_UTF8);.  if( r
326e0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
326f0 20 20 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e      rc = pVtab->
32700 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
32710 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
32720 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
32730 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
32740 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 70 2d  , pVtab);.    p-
32750 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
32760 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
32770 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
32780 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32790 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
327a0 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20 50   VUpdate P1 P2 P
327b0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
327c0 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50  sis: data=r[P3@P
327d0 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  2].**.** P4 is a
327e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
327f0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
32800 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
32810 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
32820 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
32830 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
32840 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20  ponding xUpdate 
32850 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65  method. P2 value
32860 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75  s.** are contigu
32870 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ous memory cells
32880 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33 20   starting at P3 
32890 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20 78  to pass to the x
328a0 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63  Update .** invoc
328b0 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ation. The value
328c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 28 50 33   in register (P3
328d0 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e  +P2-1) correspon
328e0 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32  ds to the .** p2
328f0 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  th element of th
32900 65 20 61 72 67 76 20 61 72 72 61 79 20 70 61 73  e argv array pas
32910 73 65 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a  sed to xUpdate..
32920 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74  **.** The xUpdat
32930 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f  e method will do
32940 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20   a DELETE or an 
32950 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a  INSERT or both..
32960 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65  ** The argv[0] e
32970 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f  lement (which co
32980 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d  rresponds to mem
32990 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20  ory cell P3).** 
329a0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
329b0 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
329c0 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20    If argv[0] is 
329d0 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a  NULL then no .**
329e0 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73   deletion occurs
329f0 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65  .  The argv[1] e
32a00 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f  lement is the ro
32a10 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a  wid of the new .
32a20 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61  ** row.  This ca
32a30 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76  n be NULL to hav
32a40 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  e the virtual ta
32a50 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e  ble select the n
32a60 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72  ew .** rowid for
32a70 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75   itself.  The su
32a80 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74  bsequent element
32a90 73 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 61  s in the array a
32aa0 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  re .** the value
32ab0 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s of columns in 
32ac0 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a  the new row..**.
32ad0 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e  ** If P2==1 then
32ae0 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65   no insert is pe
32af0 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30  rformed.  argv[0
32b00 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  ] is the rowid o
32b10 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65  f.** a row to de
32b20 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  lete..**.** P1 i
32b30 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
32b40 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 20 74  . If it is set t
32b50 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65 20 78  o true and the x
32b60 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69  Update call.** i
32b70 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68  s successful, th
32b80 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  en the value ret
32b90 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
32ba0 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
32bb0 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20  id() .** is set 
32bc0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
32bd0 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68  the rowid for th
32be0 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72  e row just inser
32bf0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ted..**.** P5 is
32c00 20 74 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f   the error actio
32c10 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20  ns (OE_Replace, 
32c20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f  OE_Fail, OE_Igno
32c30 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61  re, etc) to.** a
32c40 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65  pply in the case
32c50 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   of a constraint
32c60 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69   failure on an i
32c70 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e  nsert or update.
32c80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64  .*/.case OP_VUpd
32c90 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ate: {.  sqlite3
32ca0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
32cb0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
32cc0 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e  pModule;.  int n
32cd0 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Arg;.  int i;.  
32ce0 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77  sqlite_int64 row
32cf0 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72  id;.  Mem **apAr
32d00 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20  g;.  Mem *pX;.. 
32d10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
32d20 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f  ==1        || pO
32d30 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20  p->p5==OE_Fail  
32d40 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
32d50 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20  Rollback .      
32d60 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
32d70 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35  Abort || pOp->p5
32d80 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70  ==OE_Ignore || p
32d90 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
32da0 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  ce.  );.  assert
32db0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
32dc0 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   );.  pVtab = pO
32dd0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
32de0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
32df0 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20  (sqlite3_module 
32e00 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  *)pVtab->pModule
32e10 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e  ;.  nArg = pOp->
32e20 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
32e30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54  p->p4type==P4_VT
32e40 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  AB );.  if( ALWA
32e50 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  YS(pModule->xUpd
32e60 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76  ate) ){.    u8 v
32e70 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
32e80 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
32e90 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20  ct;.    apArg = 
32ea0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
32eb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
32ec0 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
32ed0 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
32ee0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
32ef0 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20  sValid(pX) );.  
32f00 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
32f10 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20  ange(p, pX);.   
32f20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
32f30 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
32f40 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62    }.    db->vtab
32f50 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70  OnConflict = pOp
32f60 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70  ->p5;.    rc = p
32f70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
32f80 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
32f90 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
32fa0 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
32fb0 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66  ict = vtabOnConf
32fc0 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  lict;.    sqlite
32fd0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
32fe0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
32ff0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
33000 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
33010 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
33020 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
33030 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
33040 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
33050 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
33060 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
33070 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
33080 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  }.    if( (rc&0x
33090 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
330a0 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70  TRAINT && pOp->p
330b0 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72  4.pVtab->bConstr
330c0 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66  aint ){.      if
330d0 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  ( pOp->p5==OE_Ig
330e0 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20  nore ){.        
330f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
33100 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
33110 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74       p->errorAct
33120 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d  ion = ((pOp->p5=
33130 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f  =OE_Replace) ? O
33140 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70  E_Abort : pOp->p
33150 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  5);.      }.    
33160 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
33170 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d  nChange++;.    }
33180 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
33190 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
331a0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
331b0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
331c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
331d0 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
331e0 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
331f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
33200 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
33210 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
33220 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
33230 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
33240 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
33250 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
33260 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
33270 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
33280 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
33290 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
332a0 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
332b0 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
332c0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
332d0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
332e0 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
332f0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
33300 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
33310 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
33320 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
33330 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
33340 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
33350 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
33360 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
33370 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
33380 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
33390 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
333a0 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
333b0 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
333c0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
333d0 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
333e0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
333f0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
33400 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
33410 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
33420 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
33430 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
33440 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
33450 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73  release */.  uns
33460 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
33470 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
33480 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
33490 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
334a0 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
334b0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
334c0 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
334d0 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
334e0 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
334f0 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
33500 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
33510 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
33520 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
33530 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
33540 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
33550 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
33560 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
33570 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  f.../* Opcode: I
33580 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  nit * P2 * P4 *.
33590 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74  ** Synopsis:  St
335a0 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20  art at P2.**.** 
335b0 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e  Programs contain
335c0 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
335d0 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  ce of this opcod
335e0 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69  e as the very fi
335f0 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a  rst.** opcode..*
33600 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
33610 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
33620 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
33630 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
33640 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
33650 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
33660 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
33670 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
33680 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20  callback..** Or 
33690 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20  if P4 is blank, 
336a0 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72  use the string r
336b0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
336c0 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20  e3_sql()..**.** 
336d0 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  If P2 is not zer
336e0 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
336f0 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
33700 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20  se OP_Init: {   
33710 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
33720 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  /.  char *zTrace
33730 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
33740 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  if( pOp->p2 ){. 
33750 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
33760 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66  - 1;.  }.#ifndef
33770 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
33780 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72  CE.  if( db->xTr
33790 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f  ace.   && !p->do
337a0 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28  ingRerun.   && (
337b0 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
337c0 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
337d0 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
337e0 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69   ){.    z = sqli
337f0 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
33800 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
33810 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
33820 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20  pTraceArg, z);. 
33830 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
33840 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66  (db, z);.  }.#if
33850 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46  def SQLITE_USE_F
33860 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72  CNTL_TRACE.  zTr
33870 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
33880 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
33890 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
338a0 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74  Trace ){.    int
338b0 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
338c0 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
338d0 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61  {.      if( DbMa
338e0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
338f0 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e  ask, i)==0 ) con
33900 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
33910 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
33920 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  l(db, db->aDb[i]
33930 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  .zName, SQLITE_F
33940 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61  CNTL_TRACE, zTra
33950 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ce);.    }.  }.#
33960 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
33970 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20  USE_FCNTL_TRACE 
33980 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
33990 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
339a0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
339b0 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
339c0 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
339d0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
339e0 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
339f0 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
33a00 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
33a10 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
33a20 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
33a30 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33a40 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
33a50 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
33a60 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65 61 6b  TRACE */.  break
33a70 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
33a80 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
33a90 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
33aa0 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
33ab0 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
33ac0 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
33ad0 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
33ae0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
33af0 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
33b00 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
33b10 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
33b20 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
33b30 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
33b40 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
33b50 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
33b60 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
33b70 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
33b80 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
33b90 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
33ba0 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
33bb0 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
33bc0 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
33bd0 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
33be0 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
33bf0 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
33c00 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
33c10 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
33c20 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
33c30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33c40 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20  opcode==OP_Noop 
33c50 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
33c60 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20  OP_Explain );.  
33c70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a  break;.}../*****
33c80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33c90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33ca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33cb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33cc0 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
33cd0 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69  cases of the swi
33ce0 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62  tch statement ab
33cf0 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68  ove this line sh
33d00 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65  ould all be inde
33d10 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61  nted.** by 6 spa
33d20 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65  ces.  But the le
33d30 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73  ft-most 6 spaces
33d40 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76   have been remov
33d50 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68  ed to improve th
33d60 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79  e.** readability
33d70 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69  .  From this poi
33d80 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20  nt on down, the 
33d90 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
33da0 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20  on rules are.** 
33db0 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a  restored..******
33dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33e00 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a  *******/.    }..
33e10 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
33e20 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ILE.    {.      
33e30 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71  u64 endTime = sq
33e40 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20  lite3Hwtime();. 
33e50 20 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65       if( endTime
33e60 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e 63 79  >start ) pOp->cy
33e70 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20  cles += endTime 
33e80 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70  - start;.      p
33e90 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d  Op->cnt++;.    }
33ea0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
33eb0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
33ec0 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
33ed0 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
33ee0 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
33ef0 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
33f00 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
33f10 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
33f20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
33f30 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
33f40 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
33f50 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
33f60 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
33f70 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
33f80 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
33f90 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
33fa0 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
33fb0 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
33fc0 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
33fd0 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
33fe0 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
33ff0 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
34000 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
34010 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
34020 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
34030 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
34040 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72  c!=0 ) printf("r
34050 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
34060 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
34070 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
34080 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
34090 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
340a0 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
340b0 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  e(pOp->p2, &aMem
340c0 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
340d0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f    }.      if( pO
340e0 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
340f0 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
34100 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
34110 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
34120 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
34130 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
34140 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
34150 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
34160 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
34170 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
34180 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
34190 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
341a0 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
341b0 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
341c0 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
341d0 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
341e0 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
341f0 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
34200 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
34210 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
34220 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
34230 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
34240 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c  .  testcase( sql
34250 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
34260 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71  .xLog!=0 );.  sq
34270 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73  lite3_log(rc, "s
34280 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20  tatement aborts 
34290 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c  at %d: [%s] %s",
342a0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
342b0 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c       pc, p->zSql
342c0 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
342d0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
342e0 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
342f0 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
34300 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
34310 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
34320 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
34330 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61   if( resetSchema
34340 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20  OnFault>0 ){.   
34350 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
34360 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
34370 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
34380 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
34390 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
343a0 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
343b0 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
343c0 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
343d0 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
343e0 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
343f0 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
34400 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
34410 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
34420 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
34430 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61  tRowid;.  testca
34440 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b  se( nVmStep>0 );
34450 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
34460 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
34470 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e  _VM_STEP] += (in
34480 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c  t)nVmStep;.  sql
34490 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29  ite3VdbeLeave(p)
344a0 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  ;.  return rc;..
344b0 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
344c0 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72  e if a string or
344d0 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61   blob larger tha
344e0 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
344f0 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f  GTH.  ** is enco
34500 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f  untered..  */.to
34510 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33  o_big:.  sqlite3
34520 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
34530 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69  rrMsg, db, "stri
34540 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
34550 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
34560 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
34570 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
34580 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
34590 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
345a0 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
345b0 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
345c0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
345d0 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
345e0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
345f0 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d   db, "out of mem
34600 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  ory");.  rc = SQ
34610 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f  LITE_NOMEM;.  go
34620 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
34630 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
34640 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
34650 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
34660 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
34670 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
34680 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
34690 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
346a0 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
346b0 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
346c0 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
346d0 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
346e0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
346f0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
34700 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
34710 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
34720 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
34730 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
34740 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
34750 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
34760 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
34770 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
34780 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
34790 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
347a0 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
347b0 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
347c0 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
347d0 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
347e0 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
347f0 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
34800 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
34810 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
34820 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
34830 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
34840 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
34850 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
34860 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
34870 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
34880 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.