/ Hex Artifact Content
Login

Artifact ff9bec31cc128e98d852ebee6e5d4e160846e0c5:


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 28 75 33 32 29 70 4f 70  noRoot==(u32)pOp
1ab20 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65  ->p2 ){.    asse
1ab30 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70  rt( pCur->iDb==p
1ab40 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f  Op->p3 );      /
1ab50 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20  * Guaranteed by 
1ab60 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1ab70 6f 72 20 2a 2f 0a 20 20 20 20 62 72 65 61 6b 3b  or */.    break;
1ab80 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65  .  }.  /* If the
1ab90 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63   cursor is not c
1aba0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72  urrently open or
1abb0 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69   is open on a di
1abc0 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64  fferent.  ** ind
1abd0 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ex, then fall th
1abe0 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70  rough into OP_Op
1abf0 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20  enRead to force 
1ac00 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 7d 0a 63 61  a reopen */.}.ca
1ac10 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a  se OP_OpenRead:.
1ac20 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74  case OP_OpenWrit
1ac30 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  e: {.  int nFiel
1ac40 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  d;.  KeyInfo *pK
1ac50 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32  eyInfo;.  int p2
1ac60 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1ac70 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72  nt wrFlag;.  Btr
1ac80 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75  ee *pX;.  VdbeCu
1ac90 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62  rsor *pCur;.  Db
1aca0 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74   *pDb;..  assert
1acb0 28 20 28 70 4f 70 2d 3e 70 35 26 28 4f 50 46 4c  ( (pOp->p5&(OPFL
1acc0 41 47 5f 50 32 49 53 52 45 47 7c 4f 50 46 4c 41  AG_P2ISREG|OPFLA
1acd0 47 5f 42 55 4c 4b 43 53 52 29 29 3d 3d 70 4f 70  G_BULKCSR))==pOp
1ace0 2d 3e 70 35 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p5 );.  assert
1acf0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1ad00 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70  P_OpenWrite || p
1ad10 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61  Op->p5==0 );.  a
1ad20 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1ad30 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1ad40 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ad50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70  _OpenRead || pOp
1ad60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f  ->opcode==OP_Reo
1ad70 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20  penIdx.         
1ad80 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d   || p->readOnly=
1ad90 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  =0 );..  if( p->
1ada0 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72  expired ){.    r
1adb0 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
1adc0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
1add0 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a  ..  nField = 0;.
1ade0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a    pKeyInfo = 0;.
1adf0 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
1ae00 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
1ae10 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1ae20 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1ae30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1ae40 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1ae50 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20  eMask, iDb) );. 
1ae60 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1ae70 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
1ae80 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
1ae90 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
1aea0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1aeb0 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
1aec0 20 77 72 46 6c 61 67 20 3d 20 31 3b 0a 20 20 20   wrFlag = 1;.   
1aed0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1aee0 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1aef0 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
1af00 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
1af10 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1af20 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
1af30 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
1af40 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
1af50 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
1af60 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1af70 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
1af80 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
1af90 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
1afa0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
1afb0 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
1afc0 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
1afd0 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70    assert( p2<=(p
1afe0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
1aff0 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d  r) );.    pIn2 =
1b000 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20   &aMem[p2];.    
1b010 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1b020 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20  id(pIn2) );.    
1b030 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
1b040 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
1b050 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
1b060 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
1b070 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32  fy(pIn2);.    p2
1b080 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e   = (int)pIn2->u.
1b090 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32  i;.    /* The p2
1b0a0 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f   value always co
1b0b0 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72  mes from a prior
1b0c0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1b0d0 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a  opcode and.    *
1b0e0 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69  * that opcode wi
1b0f0 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68  ll always set th
1b100 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20  e p2 value to 2 
1b110 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20  or more or else 
1b120 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20  fail..    ** If 
1b130 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69  there were a fai
1b140 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72  lure, the prepar
1b150 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  ed statement wou
1b160 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20  ld have halted. 
1b170 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61     ** before rea
1b180 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  ching this instr
1b190 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69  uction. */.    i
1b1a0 66 28 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29  f( NEVER(p2<2) )
1b1b0 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51   {.      rc = SQ
1b1c0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1b1d0 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  T;.      goto ab
1b1e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b1f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1b200 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1b210 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20  4_KEYINFO ){.   
1b220 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
1b230 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
1b240 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1b250 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1b260 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1b270 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1b280 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   );.    nField =
1b290 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
1b2a0 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69  d+pKeyInfo->nXFi
1b2b0 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eld;.  }else if(
1b2c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b2d0 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46  _INT32 ){.    nF
1b2e0 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
1b2f0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
1b300 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1b310 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d  assert( nField>=
1b320 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  0 );.  testcase(
1b330 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f   nField==0 );  /
1b340 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54  * Table with INT
1b350 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1b360 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73   and nothing els
1b370 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c  e */.  pCur = al
1b380 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1b390 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c  pOp->p1, nField,
1b3a0 20 69 44 62 2c 20 31 29 3b 0a 20 20 69 66 28 20   iDb, 1);.  if( 
1b3b0 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1b3c0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1b3d0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1b3e0 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1b3f0 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52  1;.  pCur->pgnoR
1b400 6f 6f 74 20 3d 20 70 32 3b 0a 20 20 72 63 20 3d  oot = p2;.  rc =
1b410 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1b420 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c  sor(pX, p2, wrFl
1b430 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43  ag, pKeyInfo, pC
1b440 75 72 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  ur->pCursor);.  
1b450 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
1b460 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73   pKeyInfo;.  ass
1b470 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
1b480 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
1b490 4f 41 44 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  OAD );.  sqlite3
1b4a0 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 73  BtreeCursorHints
1b4b0 28 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 2c 20  (pCur->pCursor, 
1b4c0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1b4d0 47 5f 42 55 4c 4b 43 53 52 29 29 3b 0a 0a 20 20  G_BULKCSR));..  
1b4e0 2f 2a 20 53 69 6e 63 65 20 69 74 20 70 65 72 66  /* Since it perf
1b4f0 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f 72 79 20 61  orms no memory a
1b500 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72 20 49 4f 2c  llocation or IO,
1b510 20 74 68 65 20 6f 6e 6c 79 20 76 61 6c 75 65 20   the only value 
1b520 74 68 61 74 0a 20 20 2a 2a 20 73 71 6c 69 74 65  that.  ** sqlite
1b530 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 6d  3BtreeCursor() m
1b540 61 79 20 72 65 74 75 72 6e 20 69 73 20 53 51 4c  ay return is SQL
1b550 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20 20 61 73 73  ITE_OK. */.  ass
1b560 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
1b570 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 53 65 74 20  OK );..  /* Set 
1b580 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69  the VdbeCursor.i
1b590 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e  sTable variable.
1b5a0 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
1b5b0 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74  ns of.  ** SQLit
1b5c0 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20  e used to check 
1b5d0 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  if the root-page
1b5e0 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65   flags were sane
1b5f0 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20   at this point. 
1b600 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64   ** and report d
1b610 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
1b620 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20  on if they were 
1b630 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68  not, but this ch
1b640 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e  eck has.  ** sin
1b650 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  ce moved into th
1b660 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20  e btree layer.  
1b670 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54  */  .  pCur->isT
1b680 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79  able = pOp->p4ty
1b690 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a  pe!=P4_KEYINFO;.
1b6a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b6b0 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
1b6c0 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
1b6d0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b6e0 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a  nColumn=P2.**.**
1b6f0 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1b700 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
1b710 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
1b720 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
1b730 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
1b740 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
1b750 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
1b760 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
1b770 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c  .  The ephemeral
1b780 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c  .** table is del
1b790 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  eted automatical
1b7a0 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ly when the curs
1b7b0 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a  or is closed..**
1b7c0 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
1b7d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1b7e0 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  in the ephemeral
1b7f0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1b800 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
1b810 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
1b820 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
1b830 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
1b840 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
1b850 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1b860 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
1b870 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1b880 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
1b890 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
1b8a0 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
1b8b0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  dex..**.** The P
1b8c0 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20  5 parameter can 
1b8d0 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65  be a mask of the
1b8e0 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64   BTREE_* flags d
1b8f0 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72  efined.** in btr
1b900 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61  ee.h.  These fla
1b910 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63  gs control aspec
1b920 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74  ts of the operat
1b930 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74  ion of.** the bt
1b940 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f  ree.  The BTREE_
1b950 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64  OMIT_JOURNAL and
1b960 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c   BTREE_SINGLE fl
1b970 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64  ags are.** added
1b980 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
1b990 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
1b9a0 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50  enAutoindex P1 P
1b9b0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
1b9c0 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1b9d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1b9e0 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  de works the sam
1b9f0 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  e as OP_OpenEphe
1ba00 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61  meral.  It has a
1ba10 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61  .** different na
1ba20 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73  me to distinguis
1ba30 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c  h its use.  Tabl
1ba40 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
1ba50 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f  .** by this opco
1ba60 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
1ba70 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  for automaticall
1ba80 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69  y created transi
1ba90 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69  ent.** indices i
1baa0 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65  n joins..*/.case
1bab0 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65   OP_OpenAutoinde
1bac0 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  x: .case OP_Open
1bad0 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56  Ephemeral: {.  V
1bae0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1baf0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1bb00 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  nfo;..  static c
1bb10 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67  onst int vfsFlag
1bb20 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54  s = .      SQLIT
1bb30 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
1bb40 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1bb50 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20  OPEN_CREATE |.  
1bb60 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1bb70 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
1bb80 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45    SQLITE_OPEN_DE
1bb90 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20  LETEONCLOSE |.  
1bba0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1bbb0 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20  TRANSIENT_DB;.  
1bbc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1bbd0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1bbe0 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1bbf0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1bc00 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1bc10 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29   pOp->p2, -1, 1)
1bc20 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1bc30 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1bc40 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1bc50 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d  ;.  pCx->isEphem
1bc60 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d  eral = 1;.  rc =
1bc70 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
1bc80 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64  n(db->pVfs, 0, d
1bc90 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20  b, &pCx->pBt, . 
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
1bcc0 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
1bcd0 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
1bce0 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
1bcf0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1bd00 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
1bd10 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1bd20 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20  Trans(pCx->pBt, 
1bd30 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
1bd40 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1bd50 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
1bd60 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
1bd70 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
1bd80 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
1bd90 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
1bda0 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
1bdb0 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f  th the BTREE_BLO
1bdc0 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65  BKEY flag before
1bdd0 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
1bde0 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
1bdf0 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
1be00 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
1be10 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
1be20 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1be30 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
1be40 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f  page 1 (an BLOB_
1be50 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20  INTKEY table).. 
1be60 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70     */.    if( (p
1be70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1be80 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29  4.pKeyInfo)!=0 )
1be90 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
1bea0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1beb0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1bec0 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
1bed0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1bee0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
1bef0 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42  x->pBt, &pgno, B
1bf00 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70  TREE_BLOBKEY | p
1bf10 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20  Op->p5); .      
1bf20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1bf30 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
1bf40 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
1bf50 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
1bf60 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1bf70 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1bf80 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1bf90 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1bfa0 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20  NC(db) );.      
1bfb0 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1bfc0 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  = pKeyInfo;.    
1bfd0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1bfe0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1bff0 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70  >pBt, pgno, 1, p
1c000 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43  KeyInfo, pCx->pC
1c010 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a  ursor);.      }.
1c020 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
1c030 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  le = 0;.    }els
1c040 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
1c050 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1c060 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45  (pCx->pBt, MASTE
1c070 52 5f 52 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43  R_ROOT, 1, 0, pC
1c080 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
1c090 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1c0a0 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
1c0b0 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20   pCx->isOrdered 
1c0c0 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45  = (pOp->p5!=BTRE
1c0d0 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20  E_UNORDERED);.  
1c0e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1c0f0 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20  ode: SorterOpen 
1c100 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a  P1 P2 * P4 *.**.
1c110 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1c120 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1c130 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70  nEphemeral excep
1c140 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a  t that it opens.
1c150 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  ** a transient i
1c160 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65  ndex that is spe
1c170 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e  cifically design
1c180 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65  ed to sort large
1c190 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67  .** tables using
1c1a0 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72   an external mer
1c1b0 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68  ge-sort algorith
1c1c0 6d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  m..*/.case OP_So
1c1d0 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1c1e0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1c1f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c200 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1c210 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1c220 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1c230 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1c240 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1c250 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  1);.  if( pCx==0
1c260 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1c270 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1c280 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1c290 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  fo;.  assert( pC
1c2a0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  x->pKeyInfo->db=
1c2b0 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  =db );.  assert(
1c2c0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e   pCx->pKeyInfo->
1c2d0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1c2e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
1c2f0 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c  beSorterInit(db,
1c300 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a   pCx);.  break;.
1c310 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1c320 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1c330 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1c340 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e  s: P3 columns in
1c350 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65   r[P2].**.** Ope
1c360 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
1c370 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
1c380 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
1c390 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
1c3a0 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
1c3b0 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  .  The content o
1c3c0 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  f that one row i
1c3d0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
1c3e0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73   memory.** regis
1c3f0 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65  ter P2.  In othe
1c400 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20  r words, cursor 
1c410 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  P1 becomes an al
1c420 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20  ias for the .** 
1c430 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74  MEM_Blob content
1c440 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65   contained in re
1c450 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1c460 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
1c470 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
1c480 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
1c490 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
1c4a0 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
1c4b0 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
1c4c0 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
1c4d0 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
1c4e0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
1c4f0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
1c500 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
1c510 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
1c520 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
1c530 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
1c540 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
1c550 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
1c560 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1c570 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
1c580 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1c590 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
1c5a0 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
1c5b0 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
1c5c0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1c5d0 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
1c5e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1c5f0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1c600 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1c610 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
1c620 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1c630 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1c640 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
1c650 31 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 0);.  if( pCx
1c660 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1c670 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1c680 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73  w = 1;.  pCx->ps
1c690 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70  eudoTableReg = p
1c6a0 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
1c6b0 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73  sTable = 1;.  as
1c6c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1c6d0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1c6e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1c6f0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1c700 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1c710 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1c720 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1c730 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1c740 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1c750 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1c760 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1c770 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1c780 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1c790 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1c7a0 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1c7b0 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1c7c0 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1c7d0 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1c7e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1c7f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c800 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1c810 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1c820 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1c830 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1c840 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1c850 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1c860 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1c870 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1c880 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1c890 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1c8a0 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1c8b0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1c8c0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1c8d0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1c8e0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1c8f0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1c900 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1c910 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1c920 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1c930 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1c940 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1c950 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1c960 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1c970 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1c980 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1c990 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1c9a0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1c9b0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1c9c0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1c9d0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1c9e0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1c9f0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1ca00 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1ca10 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1ca20 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1ca30 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1ca40 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1ca50 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1ca60 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1ca70 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1ca80 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1ca90 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1caa0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1cab0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1cac0 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1cad0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1cae0 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1caf0 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1cb00 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1cb10 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1cb20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1cb30 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1cb40 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cb50 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1cb60 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1cb70 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1cb80 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1cb90 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1cba0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1cbb0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1cbc0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1cbd0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1cbe0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1cbf0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1cc00 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1cc10 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1cc20 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1cc30 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1cc40 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1cc50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1cc60 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1cc70 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1cc80 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1cc90 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1cca0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1ccb0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1ccc0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1ccd0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1cce0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1ccf0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1cd00 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1cd10 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1cd20 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1cd30 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1cd40 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1cd50 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1cd60 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1cd70 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1cd80 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1cd90 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1cda0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1cdb0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1cdc0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1cdd0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1cde0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1cdf0 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1ce00 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1ce10 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1ce20 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1ce30 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1ce40 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1ce50 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1ce60 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1ce70 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1ce80 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1ce90 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1cea0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1ceb0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1cec0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1ced0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1cee0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1cef0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1cf00 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1cf10 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1cf20 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1cf30 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1cf40 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1cf50 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1cf60 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1cf70 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1cf80 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1cf90 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1cfa0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1cfb0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1cfc0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1cfd0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1cfe0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1cff0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1d000 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1d010 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1d020 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1d030 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1d040 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1d050 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1d060 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1d070 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1d080 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1d090 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1d0a0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1d0b0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1d0c0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1d0d0 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1d0e0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1d0f0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1d100 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1d110 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1d120 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1d130 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1d140 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1d150 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1d160 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1d170 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1d180 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1d190 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1d1a0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1d1b0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1d1c0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1d1d0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1d1e0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1d1f0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1d200 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1d210 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1d220 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1d230 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1d240 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1d250 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1d260 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1d270 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1d280 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1d290 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1d2a0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1d2b0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1d2c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1d2d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1d2e0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1d2f0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1d300 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1d310 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1d320 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1d330 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1d340 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1d350 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1d360 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1d370 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1d380 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1d390 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1d3a0 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1d3b0 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1d3c0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1d3d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d3e0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1d3f0 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1d400 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1d410 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1d420 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1d430 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1d440 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1d450 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1d460 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
1d470 6f 63 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  oc;.  VdbeCursor
1d480 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64   *pC;.  Unpacked
1d490 52 65 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20  Record r;.  int 
1d4a0 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b  nField;.  i64 iK
1d4b0 65 79 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ey;      /* The 
1d4c0 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
1d4d0 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  seek to */..  as
1d4e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d4f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1d500 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1d510 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
1d520 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1d530 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1d540 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1d550 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
1d560 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
1d570 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1d580 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1d590 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1d5a0 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1d5b0 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1d5c0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1d5d0 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1d5e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d5f0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1d600 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
1d610 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20  rsor!=0 );.  oc 
1d620 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
1d630 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
1d640 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d650 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
1d660 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
1d670 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
1d680 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
1d690 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1d6a0 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1d6b0 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1d6c0 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1d6d0 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62  string,.    ** b
1d6e0 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1d6f0 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1d700 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1d710 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1d720 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1d730 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a  o covert it. */.
1d740 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
1d750 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 41  [pOp->p3];.    A
1d760 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
1d770 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 69  ity(pIn3);.    i
1d780 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
1d790 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
1d7a0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
1d7b0 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20  Valid = 0;..    
1d7c0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1d7d0 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  ue could not be 
1d7e0 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1d7f0 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75  n integer withou
1d800 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66  t.    ** loss of
1d810 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
1d820 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65  en special proce
1d830 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72 65  ssing is require
1d840 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  d... */.    if( 
1d850 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1d860 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
1d870 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
1d880 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
1d890 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ==0 ){.        /
1d8a0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
1d8b0 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  e cannot be conv
1d8c0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b  erted into any k
1d8d0 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c  ind of a number,
1d8e0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
1d8f0 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74   the seek is not
1d900 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75   possible, so ju
1d910 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
1d920 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1d930 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63   - 1;  VdbeBranc
1d940 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
1d950 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1d960 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1d970 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1d980 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
1d990 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1d9a0 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1d9b0 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1d9c0 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
1d9d0 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
1d9e0 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
1d9f0 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
1da00 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
1da10 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
1da20 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
1da30 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1da40 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
1da50 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
1da60 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1da70 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
1da80 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
1da90 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
1daa0 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29  pIn3->r<(double)
1dab0 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1dac0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1dad0 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29  E==(OP_SeekGT-1)
1dae0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1daf0 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28  rt( OP_SeekLT==(
1db00 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a  OP_SeekLE-1) );.
1db10 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1db20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30  (OP_SeekLE & 0x0
1db30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1db40 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1db50 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1db60 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1db70 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kGT & 0x0001) ) 
1db80 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  oc--;.      }.. 
1db90 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61       /* If the a
1dba0 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65  pproximation iKe
1dbb0 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61  y is smaller tha
1dbc0 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1dbd0 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1dbe0 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1dbf0 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20  te <= for < and 
1dc00 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20  > for >=.  */.  
1dc10 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e      else if( pIn
1dc20 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65  3->r>(double)iKe
1dc30 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1dc40 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d  ert( OP_SeekLE==
1dc50 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b  (OP_SeekLT+1) );
1dc60 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1dc70 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f   OP_SeekGT==(OP_
1dc80 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20  SeekGE+1) );.   
1dc90 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1dca0 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1dcb0 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20  )==(OP_SeekGE & 
1dcc0 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1dcd0 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1dce0 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  001)==(OP_SeekLT
1dcf0 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b   & 0x0001) ) oc+
1dd00 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  +;.      }.    }
1dd10 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
1dd20 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1dd30 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1dd40 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1dd50 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1dd60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1dd70 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1dd80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1dd90 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
1dda0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
1ddb0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
1ddc0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 43 2d  d = 1;.      pC-
1ddd0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65  >lastRowid = iKe
1dde0 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  y;.    }.  }else
1ddf0 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1de00 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73  Op->p4.i;.    as
1de10 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1de20 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1de30 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c     assert( nFiel
1de40 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65  d>0 );.    r.pKe
1de50 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
1de60 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
1de70 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64  ld = (u16)nField
1de80 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;..    /* The ne
1de90 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20  xt line of code 
1dea0 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c  computes as foll
1deb0 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72  ows, only faster
1dec0 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f  :.    **   if( o
1ded0 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  c==OP_SeekGT || 
1dee0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b  oc==OP_SeekLE ){
1def0 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1df00 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
1df10 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20     **   }else{. 
1df20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1df30 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20  ult_rc = +1;.   
1df40 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20   **   }.    */. 
1df50 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
1df60 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50  = ((1 & (oc - OP
1df70 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a  _SeekLT)) ? -1 :
1df80 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74   +1);.    assert
1df90 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc!=OP_SeekGT 
1dfa0 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1dfb0 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
1dfc0 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45  t( oc!=OP_SeekLE
1dfd0 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1dfe0 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
1dff0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1e000 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
1e010 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  c==+1 );.    ass
1e020 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1e030 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LT || r.default_
1e040 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72  rc==+1 );..    r
1e050 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
1e060 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
1e070 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
1e080 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
1e090 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
1e0a0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
1e0b0 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
1e0c0 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
1e0d0 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61    ExpandBlob(r.a
1e0e0 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  Mem);.    rc = s
1e0f0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1e100 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43  oUnpacked(pC->pC
1e110 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
1e120 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
1e130 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1e140 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1e150 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1e160 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f      }.    pC->ro
1e170 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
1e180 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
1e190 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
1e1a0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
1e1b0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
1e1c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1e1d0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
1e1e0 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
1e1f0 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
1e200 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
1e210 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
1e220 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
1e230 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
1e240 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
1e250 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
1e260 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
1e270 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1e280 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
1e290 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1e2a0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1e2b0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
1e2c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1e2d0 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72  ror;.      pC->r
1e2e0 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b  owidIsValid = 0;
1e2f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1e300 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
1e310 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1e320 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1e330 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
1e340 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
1e350 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1e360 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1e370 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1e380 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1e390 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1e3a0 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  ious(pC->pCursor
1e3b0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1e3c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1e3d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1e3e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1e3f0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
1e400 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73  id = 0;.    }els
1e410 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20  e{.      /* res 
1e420 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
1e430 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
1e440 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
1e450 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a  heck to.      **
1e460 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
1e470 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
1e480 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73  */.      res = s
1e490 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
1e4a0 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  C->pCursor);.   
1e4b0 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28   }.  }.  assert(
1e4c0 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
1e4d0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
1e4e0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
1e4f0 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d   res ){.    pc =
1e500 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1e510 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1e520 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
1e530 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1e540 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72  opsis:  intkey=r
1e550 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P2].**.** P1 is
1e560 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63   an open table c
1e570 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
1e580 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e  a rowid integer.
1e590 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72    Arrange.** for
1e5a0 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74   P1 to move so t
1e5b0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1e5c0 20 74 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e   the rowid given
1e5d0 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P2..**.** Th
1e5e0 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  is is actually a
1e5f0 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
1e600 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
1e610 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
1e620 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
1e630 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
1e640 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
1e650 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
1e660 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
1e670 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
1e680 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ens..*/.case OP_
1e690 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  Seek: {    /* in
1e6a0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
1e6b0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
1e6c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1e6d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1e6e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1e6f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1e700 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1e710 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1e720 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
1e730 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
1e740 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  able );.  pC->nu
1e750 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e  llRow = 0;.  pIn
1e760 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
1e770 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  2];.  pC->moveto
1e780 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33  Target = sqlite3
1e790 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1e7a0 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49  2);.  pC->rowidI
1e7b0 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43  sValid = 0;.  pC
1e7c0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1e7d0 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 1;.  break;.}
1e7e0 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .  ../* Opcode: 
1e7f0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
1e800 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e810 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1e820 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
1e830 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
1e840 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
1e850 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
1e860 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
1e870 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1e880 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1e890 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1e8a0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
1e8b0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
1e8c0 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  .**.** Cursor P1
1e8d0 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1e8e0 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1e8f0 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1e900 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1e910 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20   is a prefix of 
1e920 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
1e930 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
1e940 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a  ade to P2 and.**
1e950 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1e960 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63  ting at the matc
1e970 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
1e980 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1e990 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1e9a0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
1e9b0 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a  ere it can be.**
1e9c0 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65   advanced in the
1e9d0 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69   forward directi
1e9e0 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e  on.  The Next in
1e9f0 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77  struction will w
1ea00 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20  ork,.** but not 
1ea10 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63  the Prev instruc
1ea20 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
1ea30 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
1ea40 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45  NoConflict, NotE
1ea50 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f  xists. SeekGe.*/
1ea60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46  ./* Opcode: NotF
1ea70 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
1ea80 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1ea90 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1eaa0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
1eab0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
1eac0 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
1ead0 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
1eae0 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
1eaf0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1eb00 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
1eb10 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
1eb20 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
1eb30 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
1eb40 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
1eb50 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
1eb60 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
1eb70 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
1eb80 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
1eb90 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66   is not the pref
1eba0 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
1ebb0 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
1ebc0 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e  p is made to P2.
1ebd0 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73    If P1 .** does
1ebe0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72   contain an entr
1ebf0 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d  y whose prefix m
1ec00 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34  atches the P3/P4
1ec10 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e   record then con
1ec20 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68  trol.** falls th
1ec30 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1ec40 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e  t instruction an
1ec50 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  d P1 is left poi
1ec60 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20  nting at the.** 
1ec70 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a  matching entry..
1ec80 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
1ec90 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
1eca0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1ecb0 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
1ecc0 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
1ecd0 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
1ece0 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
1ecf0 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
1ed00 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
1ed10 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
1ed20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
1ed30 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
1ed40 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1ed50 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69  Exists, NoConfli
1ed60 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ct.*/./* Opcode:
1ed70 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50   NoConflict P1 P
1ed80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1ed90 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1eda0 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
1edb0 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
1edc0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
1edd0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
1ede0 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
1edf0 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
1ee00 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
1ee10 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
1ee20 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
1ee30 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
1ee40 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
1ee50 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
1ee60 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
1ee70 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
1ee80 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
1ee90 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  d P4.** contains
1eea0 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c   any NULL value,
1eeb0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1eec0 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c  y to P2.  If all
1eed0 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a   terms of the.**
1eee0 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d   record are not-
1eef0 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63  NULL then a chec
1ef00 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74  k is done to det
1ef10 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f  ermine if any ro
1ef20 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69  w in the.** P1 i
1ef30 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61  ndex btree has a
1ef40 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72   matching key pr
1ef50 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20  efix.  If there 
1ef60 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20  are no matches, 
1ef70 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  jump.** immediat
1ef80 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ely to P2.  If t
1ef90 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c  here is a match,
1efa0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e   fall through an
1efb0 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a  d leave the P1.*
1efc0 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  * cursor pointin
1efd0 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e  g to the matchin
1efe0 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  g row..**.** Thi
1eff0 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69  s opcode is simi
1f000 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75  lar to OP_NotFou
1f010 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65  nd with the exce
1f020 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a  ptions that the.
1f030 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77  ** branch is alw
1f040 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79  ays taken if any
1f050 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61   part of the sea
1f060 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73  rch key input is
1f070 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   NULL..**.** Thi
1f080 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
1f090 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
1f0a0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
1f0b0 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
1f0c0 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
1f0d0 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
1f0e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1f0f0 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
1f100 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
1f110 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
1f120 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
1f130 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
1f140 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f  Found, Found, No
1f150 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20  tExists.*/.case 
1f160 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20  OP_NoConflict:  
1f170 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f180 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f  */.case OP_NotFo
1f190 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75  und:       /* ju
1f1a0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1f1b0 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20  OP_Found: {     
1f1c0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f1d0 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79  */.  int already
1f1e0 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69  Exists;.  int ii
1f1f0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1f200 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
1f210 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20   char *pFree;.  
1f220 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
1f230 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63  pIdxKey;.  Unpac
1f240 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63  kedRecord r;.  c
1f250 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55  har aTempRec[ROU
1f260 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63  ND8(sizeof(Unpac
1f270 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69  kedRecord)) + si
1f280 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d  zeof(Mem)*4 + 7]
1f290 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
1f2a0 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d  _TEST.  if( pOp-
1f2b0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f  >opcode!=OP_NoCo
1f2c0 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33  nflict ) sqlite3
1f2d0 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a  _found_count++;.
1f2e0 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74  #endif..  assert
1f2f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1f300 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1f310 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1f320 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1f330 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20  INT32 );.  pC = 
1f340 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f350 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1f360 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  =0 );.#ifdef SQL
1f370 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
1f380 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70  seekOp = pOp->op
1f390 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70  code;.#endif.  p
1f3a0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
1f3b0 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
1f3c0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1f3d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f3e0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
1f3f0 70 46 72 65 65 20 3d 20 30 3b 20 20 2f 2a 20 4e  pFree = 0;  /* N
1f400 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
1f410 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73   used to suppres
1f420 73 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  s a compiler war
1f430 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69 66 28 20 70  ning. */.  if( p
1f440 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20  Op->p4.i>0 ){.  
1f450 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
1f460 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
1f470 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
1f480 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
1f490 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20  r.aMem = pIn3;. 
1f4a0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
1f4b0 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  r.nField; ii++){
1f4c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
1f4d0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1f4e0 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  m[ii]) );.      
1f4f0 45 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d  ExpandBlob(&r.aM
1f500 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20  em[ii]);.#ifdef 
1f510 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
1f520 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49     if( ii ) REGI
1f530 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
1f540 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69  p3+ii, &r.aMem[i
1f550 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  i]);.#endif.    
1f560 7d 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  }.    pIdxKey = 
1f570 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  &r;.  }else{.   
1f580 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
1f590 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63  e3VdbeAllocUnpac
1f5a0 6b 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20  kedRecord(.     
1f5b0 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c     pC->pKeyInfo,
1f5c0 20 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f   aTempRec, sizeo
1f5d0 66 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46  f(aTempRec), &pF
1f5e0 72 65 65 0a 20 20 20 20 29 3b 20 0a 20 20 20 20  ree.    ); .    
1f5f0 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29  if( pIdxKey==0 )
1f600 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1f610 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
1f620 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
1f630 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1f640 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
1f650 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20  EM_Zero)==0 );  
1f660 2f 2a 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72  /* zeroblobs alr
1f670 65 61 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f  eady expanded */
1f680 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1f690 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
1f6a0 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
1f6b0 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
1f6c0 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64  xKey);.  }.  pId
1f6d0 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63  xKey->default_rc
1f6e0 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
1f6f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f  >opcode==OP_NoCo
1f700 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a  nflict ){.    /*
1f710 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f   For the OP_NoCo
1f720 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74  nflict opcode, t
1f730 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
1f740 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  any of the.    *
1f750 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61  * input fields a
1f760 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61  re NULL, since a
1f770 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55  ny key with a NU
1f780 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20  LL will not.    
1f790 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20  ** conflict */. 
1f7a0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
1f7b0 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  r.nField; ii++){
1f7c0 0a 20 20 20 20 20 20 69 66 28 20 72 2e 61 4d 65  .      if( r.aMe
1f7d0 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
1f7e0 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
1f7f0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1f800 20 31 3b 20 56 64 62 65 42 72 61 6e 63 68 54 61   1; VdbeBranchTa
1f810 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20  ken(1,2);.      
1f820 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1f830 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
1f840 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1f850 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1f860 3e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65  >pCursor, pIdxKe
1f870 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  y, 0, 0, &res);.
1f880 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d    if( pOp->p4.i=
1f890 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
1f8a0 33 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65  3DbFree(db, pFre
1f8b0 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  e);.  }.  if( rc
1f8c0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1f8d0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
1f8e0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
1f8f0 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45   res;.  alreadyE
1f900 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
1f910 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1f920 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74  = 1-alreadyExist
1f930 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
1f940 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
1f950 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
1f960 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
1f970 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1f980 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
1f990 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1f9a0 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d  (alreadyExists!=
1f9b0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c  0,2);.    if( al
1f9c0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 70 63  readyExists ) pc
1f9d0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1f9e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
1f9f0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72  eBranchTaken(alr
1fa00 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
1fa10 3b 0a 20 20 20 20 69 66 28 20 21 61 6c 72 65 61  ;.    if( !alrea
1fa20 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d 20  dyExists ) pc = 
1fa30 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
1fa40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1fa50 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74  Opcode: NotExist
1fa60 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
1fa70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
1fa80 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
1fa90 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
1faa0 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
1fab0 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
1fac0 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
1fad0 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50  ger.** keys).  P
1fae0 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  3 is an integer 
1faf0 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f  rowid.  If P1 do
1fb00 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
1fb10 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20   record with.** 
1fb20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
1fb30 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1fb40 6f 20 50 32 2e 20 20 49 66 20 50 31 20 64 6f 65  o P2.  If P1 doe
1fb50 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
1fb60 72 64 0a 2a 2a 20 77 69 74 68 20 72 6f 77 69 64  rd.** with rowid
1fb70 20 50 33 20 74 68 65 6e 20 6c 65 61 76 65 20 74   P3 then leave t
1fb80 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
1fb90 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
1fba0 64 20 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20 74 68  d and fall.** th
1fbb0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
1fbc0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
1fbd0 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
1fbe0 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
1fbf0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
1fc00 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
1fc10 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
1fc20 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
1fc30 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
1fc40 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1fc50 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1fc60 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
1fc70 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
1fc80 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
1fc90 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
1fca0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1fcb0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
1fcc0 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
1fcd0 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
1fce0 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
1fcf0 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
1fd00 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1fd10 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  und, NoConflict.
1fd20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
1fd30 69 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f  ists: {        /
1fd40 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1fd50 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1fd60 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
1fd70 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
1fd80 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49   u64 iKey;..  pI
1fd90 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1fda0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
1fdb0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1fdc0 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
1fdd0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1fde0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1fdf0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1fe00 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1fe10 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1fe20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1fe30 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
1fe40 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  kOp = 0;.#endif.
1fe50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1fe60 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
1fe70 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
1fe80 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43  leReg==0 );.  pC
1fe90 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
1fea0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
1feb0 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d  sr!=0 );.  res =
1fec0 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e   0;.  iKey = pIn
1fed0 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73  3->u.i;.  rc = s
1fee0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1fef0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
1ff00 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
1ff10 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74 52 6f  s);.  pC->lastRo
1ff20 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  wid = pIn3->u.i;
1ff30 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  .  pC->rowidIsVa
1ff40 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a  lid = res==0 ?1:
1ff50 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0;.  pC->nullRow
1ff60 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1ff70 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1ff80 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66  STALE;.  pC->def
1ff90 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1ffa0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
1ffb0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
1ffc0 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
1ffd0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1ffe0 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   1;.    assert( 
1fff0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
20000 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 70 43 2d  ==0 );.  }.  pC-
20010 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
20020 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  s;.  break;.}../
20030 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
20040 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
20050 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
20060 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ]=cursor[P1].ctr
20070 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68  ++.**.** Find th
20080 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  e next available
20090 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
200a0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
200b0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71  ** Write the seq
200c0 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74  uence number int
200d0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
200e0 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e  * The sequence n
200f0 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72  umber on the cur
20100 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  sor is increment
20110 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a  ed after this.**
20120 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a   instruction.  .
20130 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
20140 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
20150 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
20160 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ase */.  assert(
20170 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
20180 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
20190 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
201a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
201b0 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
201c0 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
201d0 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
201e0 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
201f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
20200 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
20210 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
20220 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
20230 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
20240 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
20250 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
20260 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
20270 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
20280 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
20290 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
202a0 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
202b0 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
202c0 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
202d0 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
202e0 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
202f0 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
20300 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
20310 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
20320 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
20330 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
20340 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
20350 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
20360 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
20370 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
20380 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
20390 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
203a0 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
203b0 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
203c0 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
203d0 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
203e0 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
203f0 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
20400 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
20410 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
20420 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
20430 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
20440 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
20450 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
20460 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
20470 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
20480 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
20490 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
204a0 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
204b0 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
204c0 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
204d0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
204e0 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
204f0 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20510 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
20520 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20530 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
20540 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
20550 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
20560 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
20570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20580 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
20590 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
205a0 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
205c0 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
205d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
205e0 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
205f0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
20600 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
20610 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
20620 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
20630 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
20640 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
20650 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
20660 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
20670 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
20680 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
20690 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
206a0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
206b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
206c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
206d0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
206e0 66 28 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75  f( NEVER(pC->pCu
206f0 72 73 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20  rsor==0) ){.    
20700 2f 2a 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74  /* The zero init
20710 69 61 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65  ialization above
20720 20 69 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20   is all that is 
20730 6e 65 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73  needed */.  }els
20740 65 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  e{.    /* The ne
20750 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
20760 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
20770 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
20780 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
20790 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
207a0 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
207b0 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
207c0 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
207d0 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
207e0 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
207f0 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
20800 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
20810 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
20820 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
20830 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
20840 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
20850 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
20860 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
20870 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
20880 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
20890 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
208a0 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
208b0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
208c0 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
208d0 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
208e0 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
208f0 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
20900 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
20910 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
20920 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
20930 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
20940 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
20950 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
20960 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
20970 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
20980 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
20990 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
209a0 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
209b0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
209c0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
209d0 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
209e0 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
209f0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
20a00 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
20a10 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
20a20 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
20a30 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
20a40 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
20a50 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
20a60 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
20a70 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
20a80 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
20a90 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
20aa0 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
20ab0 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
20ac0 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
20ad0 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
20ae0 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
20af0 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
20b00 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
20b10 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
20b20 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
20b30 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
20b40 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
20b50 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
20b60 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
20b70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20b80 65 65 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73  eeLast(pC->pCurs
20b90 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
20ba0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
20bb0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
20bc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
20bd0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
20be0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
20bf0 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
20c00 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
20c10 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
20c20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
20c30 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
20c40 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
20c50 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b  (pC->pCursor) );
20c60 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
20c70 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
20c80 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  e(pC->pCursor, &
20c90 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  v);.        asse
20ca0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
20cb0 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
20cc0 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
20cd0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
20ce0 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
20cf0 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
20d00 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
20d10 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
20d20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20d30 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
20d40 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
20d50 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
20d60 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
20d70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20d80 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
20d90 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
20da0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
20db0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
20dc0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
20dd0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
20de0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
20df0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
20e00 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
20e10 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
20e20 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
20e30 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
20e40 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
20e50 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
20e60 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
20e70 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
20e80 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
20e90 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
20ea0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
20eb0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
20ec0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
20ed0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
20ee0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
20ef0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
20f00 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
20f10 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
20f20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
20f30 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
20f40 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
20f50 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
20f60 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
20f70 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
20f80 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
20f90 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
20fa0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
20fb0 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
20fc0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
20fd0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
20fe0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
20ff0 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
21000 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
21010 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
21020 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
21030 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
21040 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
21050 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
21060 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
21070 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
21080 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
21090 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
210a0 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
210b0 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
210c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
210d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
210e0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
210f0 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
21100 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
21110 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
21120 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
21130 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
21140 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
21150 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
21160 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
21170 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
21180 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
21190 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
211a0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
211b0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
211c0 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
211d0 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
211e0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
211f0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
21200 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
21210 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
21220 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
21230 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
21240 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
21250 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
21260 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
21270 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
21280 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
21290 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
212a0 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
212b0 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
212c0 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
212f0 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
21300 0a 20 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65  .      /* on the
21310 20 66 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20   first attempt, 
21320 73 69 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f  simply do one mo
21330 72 65 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73  re than previous
21340 20 2a 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c 61   */.      v = la
21350 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76  stRowid;.      v
21360 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
21370 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f  1); /* ensure do
21380 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76  esn't go negativ
21390 65 20 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20  e */.      v++; 
213a0 2f 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65  /* ensure non-ze
213b0 72 6f 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  ro */.      cnt 
213c0 3d 20 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  = 0;.      while
213d0 28 20 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  (   ((rc = sqlit
213e0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
213f0 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
21400 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20  r, 0, (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 20 20 20 20 20 20 30                 0
21440 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45  , &res))==SQLITE
21450 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20  _OK).           
21460 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20   && (res==0).   
21470 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63           && (++c
21480 6e 74 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20  nt<100)){.      
21490 20 20 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d    /* collision -
214a0 20 74 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e   try another ran
214b0 64 6f 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20  dom rowid */.   
214c0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
214d0 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
214e0 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
214f0 69 66 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20  if( cnt<5 ){.   
21500 20 20 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73         /* try "s
21510 6d 61 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77  mall" random row
21520 69 64 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74  ids for the init
21530 69 61 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a  ial attempts */.
21540 20 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 30            v &= 0
21550 78 66 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20  xffffff;.       
21560 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
21570 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
21580 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65  D>>1); /* ensure
21590 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61   doesn't go nega
215a0 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  tive */.        
215b0 7d 0a 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f  }.        v++; /
215c0 2a 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72  * ensure non-zer
215d0 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  o */.      }.   
215e0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
215f0 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29  E_OK && res==0 )
21600 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
21610 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
21620 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
21630 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
21640 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
21650 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
21660 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
21670 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
21680 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
21690 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
216a0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
216b0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
216c0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
216d0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
216e0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
216f0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
21700 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
21710 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
21720 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
21730 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
21740 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
21750 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
21760 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
21770 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
21780 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
21790 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
217a0 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
217b0 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
217c0 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
217d0 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
217e0 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
217f0 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
21800 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
21810 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
21820 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
21830 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
21840 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
21850 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
21860 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
21870 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
21880 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
21890 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
218a0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
218b0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
218c0 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
218d0 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
218e0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
218f0 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
21900 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
21910 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
21920 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
21930 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
21940 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
21950 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
21960 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
21970 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
21980 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
21990 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
219a0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
219b0 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
219c0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
219d0 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
219e0 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
219f0 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20 73  tExists) was a s
21a00 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69  uccess, then thi
21a10 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
21a20 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
21a30 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
21a40 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
21a50 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
21a60 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
21a70 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
21a80 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
21a90 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
21aa0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
21ab0 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
21ac0 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
21ad0 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
21ae0 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79  e.** has already
21af0 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
21b00 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79  cursor correctly
21b10 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  .  This is an op
21b20 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68  timization.** th
21b30 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72  at boosts perfor
21b40 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e  mance by avoidin
21b50 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b  g redundant seek
21b60 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
21b70 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
21b80 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
21b90 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
21ba0 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
21bb0 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
21bc0 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
21bd0 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
21be0 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
21bf0 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
21c00 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
21c10 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
21c20 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
21c30 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
21c40 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
21c50 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
21c60 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
21c70 61 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  a Table structur
21c80 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c  e, or may be NUL
21c90 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20  L. If it is .** 
21ca0 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
21cb0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28  he update-hook (
21cc0 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
21cd0 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
21ce0 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e  ked .** followin
21cf0 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
21d00 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
21d10 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
21d20 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
21d30 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
21d40 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
21d50 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
21d60 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
21d70 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
21d80 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
21d90 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
21da0 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
21db0 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
21dc0 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
21dd0 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
21de0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
21df0 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
21e00 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
21e10 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
21e20 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
21e30 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
21e40 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
21e50 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
21e60 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
21e70 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
21e80 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
21e90 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
21ea0 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
21eb0 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
21ec0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
21ed0 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72  intkey=P3 data=r
21ee0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P2].**.** This 
21ef0 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
21f00 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63  ke OP_Insert exc
21f10 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79  ept that the key
21f20 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67   is the.** integ
21f30 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74  er value P3, not
21f40 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
21f50 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64  e integer stored
21f60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
21f70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  .*/.case OP_Inse
21f80 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73  rt: .case OP_Ins
21f90 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20  ertInt: {.  Mem 
21fa0 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
21fb0 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
21fc0 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
21fd0 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
21fe0 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
21ff0 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
22000 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
22010 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
22020 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  ord */.  i64 iKe
22030 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
22040 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20  e integer ROWID 
22050 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72  or key for the r
22060 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
22070 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  rted */.  VdbeCu
22080 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43  rsor *pC;   /* C
22090 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69  ursor to table i
220a0 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74  nto which insert
220b0 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20   is written */. 
220c0 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
220d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
220e0 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70  zero-bytes to ap
220f0 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65  pend */.  int se
22100 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
22110 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
22120 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
22130 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
22140 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
22150 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
22160 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
22170 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
22180 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ook */.  Table *
22190 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61  pTab;      /* Ta
221a0 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d 20  ble structure - 
221b0 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20 61  used by update a
221c0 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  nd pre-update ho
221d0 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 20  oks */.  int op 
221e0 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4f 70  = 0;       /* Op
221f0 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20  code for update 
22200 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44  hook: SQLITE_UPD
22210 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e  ATE or SQLITE_IN
22220 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61  SERT */..  pData
22230 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
22240 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
22250 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22260 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22270 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
22280 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a  Valid(pData) );.
22290 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
222a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
222b0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
222c0 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
222d0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
222e0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
222f0 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73  leReg==0 );.  as
22300 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22310 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
22320 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
22330 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  ABLE || pOp->p4t
22340 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29  ype>=P4_STATIC )
22350 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
22360 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
22370 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  a);..  if( pOp->
22380 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
22390 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
223a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
223b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
223c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
223d0 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
223e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
223f0 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
22400 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
22410 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79   pKey);.    iKey
22420 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
22430 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
22440 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
22450 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
22460 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e      iKey = pOp->
22470 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  p3;.  }..  if( p
22480 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
22490 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41  ABLE && HAS_UPDA
224a0 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20  TE_HOOK(db) ){. 
224b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
224c0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61 73  sTable );.    as
224d0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
224e0 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
224f0 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
22500 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d  Name;.    pTab =
22510 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20   pOp->p4.pTab;. 
22520 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
22530 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
22540 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
22550 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
22560 53 45 52 54 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  SERT);.  }..#ifd
22570 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
22580 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
22590 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
225a0 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
225b0 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28   if any */.  if(
225c0 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
225d0 61 6c 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70  allback .   && p
225e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
225f0 41 42 4c 45 0a 20 20 20 26 26 20 28 21 28 70 4f  ABLE.   && (!(pO
22600 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
22610 53 55 50 44 41 54 45 29 20 7c 7c 20 70 43 2d 3e  SUPDATE) || pC->
22620 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d 30 29  rowidIsValid==0)
22630 0a 20 20 20 26 26 20 48 61 73 52 6f 77 69 64 28  .   && HasRowid(
22640 70 54 61 62 29 0a 20 20 29 7b 0a 20 20 20 20 73  pTab).  ){.    s
22650 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64  qlite3VdbePreUpd
22660 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53  ateHook(p, pC, S
22670 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44  QLITE_INSERT, zD
22680 62 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 70  b, pTab, iKey, p
22690 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23 65 6e  Op->p2);.  }.#en
226a0 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  dif..  if( pOp->
226b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
226c0 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
226d0 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
226e0 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
226f0 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
22700 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
22710 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70   = iKey;.  if( p
22720 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
22730 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44  M_Null ){.    pD
22740 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  ata->z = 0;.    
22750 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20  pData->n = 0;.  
22760 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
22770 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
22780 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
22790 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65  Str) );.  }.  se
227a0 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70  ekResult = ((pOp
227b0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
227c0 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
227d0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
227e0 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  0);.  if( pData-
227f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
22800 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  o ){.    nZero =
22810 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b   pData->u.nZero;
22820 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a  .  }else{.    nZ
22830 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  ero = 0;.  }.  r
22840 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22850 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
22860 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
22890 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
228a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
228b0 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70              (pOp
228c0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
228d0 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65  PEND)!=0, seekRe
228e0 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
228f0 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
22900 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
22910 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
22920 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
22930 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
22940 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
22950 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
22960 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
22970 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
22980 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
22990 62 61 63 6b 20 26 26 20 6f 70 20 26 26 20 48 61  back && op && Ha
229a0 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a  sRowid(pTab) ){.
229b0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
229c0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
229d0 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c  ateArg, op, zDb,
229e0 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 69 4b   pTab->zName, iK
229f0 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
22a00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22a10 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
22a20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  P4 *.**.** Delet
22a30 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
22a40 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
22a50 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
22a60 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
22a70 20 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   The cursor will
22a80 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
22a90 67 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20  g at either the 
22aa0 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
22ab0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
22ac0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
22ad0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
22ae0 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
22af0 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
22b00 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
22b10 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
22b20 65 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63  e a no-op.  Henc
22b30 65 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65  e it is OK to de
22b40 6c 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64  lete.** a record
22b50 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
22b60 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  ext loop..**.** 
22b70 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
22b80 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
22b90 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
22ba0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
22bb0 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
22bc0 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
22bd0 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
22be0 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
22bf0 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
22c00 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
22c10 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
22c20 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
22c30 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
22c40 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74  LL then it point
22c50 73 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  s to a Table str
22c60 75 74 75 72 65 2e 20 49 6e 20 74 68 69 73 20 63  uture. In this c
22c70 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74  ase either .** t
22c80 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65  he update or pre
22c90 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72  -update hook, or
22ca0 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e   both, may be in
22cb0 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75  voked. The P1 cu
22cc0 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76  rsor must.** hav
22cd0 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
22ce0 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  d using OP_NotFo
22cf0 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
22d00 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
22d10 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61  e in .** this ca
22d20 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79  se. Specifically
22d30 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  , if one is conf
22d40 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d  igured, the pre-
22d50 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a  update hook is .
22d60 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34  ** invoked if P4
22d70 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68   is not NULL. Th
22d80 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73  e update-hook is
22d90 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20   invoked if one 
22da0 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a  is configured, .
22db0 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  ** P4 is not NUL
22dc0 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41  L, and the OPFLA
22dd0 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69  G_NCHANGE flag i
22de0 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a  s set in P2..**.
22df0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
22e00 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
22e10 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65  s set in P2, the
22e20 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  n P3 contains th
22e30 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20  e address.** of 
22e40 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
22e50 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
22e60 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  e value that the
22e70 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f   rowid of the ro
22e80 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74  w will.** be set
22e90 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74   to by the updat
22ea0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
22eb0 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34 20 69 4b  lete: {.  i64 iK
22ec0 65 79 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ey;.  VdbeCursor
22ed0 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *pC;.  const ch
22ee0 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65  ar *zDb;.  Table
22ef0 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70   *pTab;.  int op
22f00 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67  flags;..  opflag
22f10 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  s = pOp->p2;.  a
22f20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22f30 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22f40 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22f50 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22f60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22f70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
22f80 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
22f90 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c   );  /* Only val
22fa0 69 64 20 66 6f 72 20 72 65 61 6c 20 74 61 62 6c  id for real tabl
22fb0 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f 74 61 62  es, no pseudotab
22fc0 6c 65 73 20 2a 2f 0a 20 20 69 4b 65 79 20 3d 20  les */.  iKey = 
22fd0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20  pC->lastRowid;  
22fe0 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 75 73 65 64      /* Only used
22ff0 20 66 6f 72 20 74 68 65 20 75 70 64 61 74 65 20   for the update 
23000 68 6f 6f 6b 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68  hook */..  /* Th
23010 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f  e OP_Delete opco
23020 64 65 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  de always follow
23030 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74  s an OP_NotExist
23040 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a  s or OP_Last or.
23050 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    ** OP_Column o
23060 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  n the same table
23070 20 77 69 74 68 6f 75 74 20 61 6e 79 20 69 6e 74   without any int
23080 65 72 76 65 6e 69 6e 67 20 6f 70 65 72 61 74 69  ervening operati
23090 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69  ons that.  ** mi
230a0 67 68 74 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61  ght move or inva
230b0 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f  lidate the curso
230c0 72 2e 20 20 48 65 6e 63 65 20 63 75 72 73 6f 72  r.  Hence cursor
230d0 20 70 43 20 69 73 20 61 6c 77 61 79 73 20 70 6f   pC is always po
230e0 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74  inting.  ** to t
230f0 68 65 20 72 6f 77 20 74 6f 20 62 65 20 64 65 6c  he row to be del
23100 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
23110 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
23120 76 65 74 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e  veto() operation
23130 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61  .  ** below is a
23140 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e  lways a no-op an
23150 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20  d cannot fail.  
23160 57 65 20 77 69 6c 6c 20 72 75 6e 20 69 74 20 61  We will run it a
23170 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20  nyhow, though,. 
23180 20 2a 2a 20 74 6f 20 67 75 61 72 64 20 61 67 61   ** to guard aga
23190 69 6e 73 74 20 66 75 74 75 72 65 20 63 68 61 6e  inst future chan
231a0 67 65 73 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ges to the code 
231b0 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f  generator..  **/
231c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
231d0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
231e0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
231f0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
23200 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45  to(pC);.  if( NE
23210 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
23220 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
23230 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
23240 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
23250 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70  e-hook or pre-up
23260 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
23270 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 69  e invoked, set i
23280 4b 65 79 20 74 6f 20 0a 20 20 2a 2a 20 74 68 65  Key to .  ** the
23290 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f   rowid of the ro
232a0 77 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 2e  w being deleted.
232b0 20 53 65 74 20 7a 44 62 20 61 6e 64 20 7a 54 61   Set zDb and zTa
232c0 62 20 61 73 20 77 65 6c 6c 2e 0a 20 20 2a 2f 0a  b as well..  */.
232d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
232e0 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
232f0 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
23300 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
23310 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
23320 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
23330 20 7c 7c 20 21 48 61 73 52 6f 77 69 64 28 70 4f   || !HasRowid(pO
23340 70 2d 3e 70 34 2e 70 54 61 62 29 20 29 3b 0a 20  p->p4.pTab) );. 
23350 20 20 20 69 4b 65 79 20 3d 20 70 43 2d 3e 6c 61     iKey = pC->la
23360 73 74 52 6f 77 69 64 3b 0a 20 20 20 20 7a 44 62  stRowid;.    zDb
23370 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
23380 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70  Db].zName;.    p
23390 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
233a0 61 62 3b 0a 20 7d 0a 0a 23 69 66 64 65 66 20 53  ab;. }..#ifdef S
233b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
233c0 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a  UPDATE_HOOK.  /*
233d0 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d   Invoke the pre-
233e0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
233f0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
23400 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
23410 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
23420 3e 70 34 2e 7a 20 26 26 20 48 61 73 52 6f 77 69  >p4.z && HasRowi
23430 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 61  d(pTab) ){.    a
23440 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73  ssert( !(opflags
23450 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
23460 54 45 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70  TE) || (aMem[pOp
23470 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p3].flags & ME
23480 4d 5f 49 6e 74 29 20 29 3b 0a 20 20 20 20 73 71  M_Int) );.    sq
23490 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61  lite3VdbePreUpda
234a0 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20  teHook(p, pC,.  
234b0 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26        (opflags &
234c0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
234d0 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
234e0 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  E : SQLITE_DELET
234f0 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c  E, .        zDb,
23500 20 70 54 61 62 2c 20 69 4b 65 79 2c 0a 20 20 20   pTab, iKey,.   
23510 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20       pOp->p3.   
23520 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
23530 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20    if( opflags & 
23540 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20  OPFLAG_ISNOOP ) 
23550 62 72 65 61 6b 3b 0a 0a 20 20 72 63 20 3d 20 73  break;..  rc = s
23560 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
23570 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  e(pC->pCursor);.
23580 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
23590 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
235a0 0a 0a 20 20 2f 2a 20 55 70 64 61 74 65 20 74 68  ..  /* Update th
235b0 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72  e change-counter
235c0 20 61 6e 64 20 69 6e 76 6f 6b 65 20 74 68 65 20   and invoke the 
235d0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
235e0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
235f0 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
23600 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
23610 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
23620 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
23630 3e 70 34 2e 7a 20 29 3b 0a 20 20 20 20 69 66 28  >p4.z );.    if(
23640 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
23650 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  & db->xUpdateCal
23660 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69  lback && HasRowi
23670 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20  d(pTab) ){.     
23680 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
23690 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
236a0 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45  Arg, SQLITE_DELE
236b0 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a  TE, zDb, pTab->z
236c0 4e 61 6d 65 2c 69 4b 65 79 29 3b 0a 20 20 20 20  Name,iKey);.    
236d0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
236e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
236f0 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
23700 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
23710 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
23720 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
23730 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
23740 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
23750 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
23760 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
23770 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
23780 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
23790 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
237a0 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
237b0 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
237c0 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
237d0 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
237e0 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
237f0 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
23800 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
23810 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
23820 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
23830 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
23840 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
23850 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
23860 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
23870 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b   Synopsis:  if k
23880 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
23890 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
238a0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
238b0 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
238c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
238d0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
238e0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
238f0 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
23900 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
23910 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
23920 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
23930 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
23940 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
23950 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
23960 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
23970 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
23980 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
23990 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
239a0 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
239b0 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
239c0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
239d0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
239e0 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
239f0 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
23a00 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
23a10 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
23a20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
23a30 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
23a40 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
23a50 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
23a60 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
23a70 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
23a80 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
23a90 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
23aa0 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
23ab0 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
23ac0 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
23ad0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
23ae0 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
23af0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
23b00 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
23b10 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
23b20 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
23b30 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23b40 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23b50 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
23b60 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
23b70 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
23b80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23b90 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
23ba0 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 63 20 3d 20  p->p4.i;.  rc = 
23bb0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
23bc0 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
23bd0 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73  3, nKeyCol, &res
23be0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
23bf0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
23c00 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20    if( res ){.   
23c10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
23c20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  .  }.  break;.};
23c30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
23c40 74 65 72 44 61 74 61 20 50 31 20 50 32 20 2a 20  terData P1 P2 * 
23c50 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
23c60 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
23c70 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
23c80 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72  ister P2 the cur
23c90 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61  rent sorter data
23ca0 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73   for sorter curs
23cb0 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
23cc0 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a  P_SorterData: {.
23cd0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23ce0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
23cf0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43  m[pOp->p2];.  pC
23d00 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
23d10 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23d20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
23d30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
23d40 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70  beSorterRowkey(p
23d50 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65  C, pOut);.  asse
23d60 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  rt( rc!=SQLITE_O
23d70 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67  K || (pOut->flag
23d80 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b  s & MEM_Blob) );
23d90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
23da0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
23db0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
23dc0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
23dd0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
23de0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
23df0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
23e00 77 20 64 61 74 61 20 66 6f 72 20 63 75 72 73 6f  w data for curso
23e10 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69  r P1..** There i
23e20 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
23e30 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
23e40 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
23e50 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
23e60 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
23e70 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
23e80 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
23e90 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
23ea0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75  .** If the P1 cu
23eb0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69  rsor must be poi
23ec0 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64  nting to a valid
23ed0 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c   row (not a NULL
23ee0 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65   row).** of a re
23ef0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
23f00 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
23f10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b  ./* Opcode: RowK
23f20 65 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ey P1 P2 * * *.*
23f30 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
23f40 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ]=key.**.** Writ
23f50 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
23f60 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
23f70 72 6f 77 20 6b 65 79 20 66 6f 72 20 63 75 72 73  row key for curs
23f80 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20  or P1..** There 
23f90 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61  is no interpreta
23fa0 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61  tion of the data
23fb0 2e 20 20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69  .  .** The key i
23fc0 73 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68  s copied onto th
23fd0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78  e P2 register ex
23fe0 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20  actly as .** it 
23ff0 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  is found in the 
24000 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
24010 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
24020 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
24030 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
24040 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
24050 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
24060 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
24070 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
24080 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79  /.case OP_RowKey
24090 3a 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74  :.case OP_RowDat
240a0 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  a: {.  VdbeCurso
240b0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
240c0 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20  r *pCrsr;.  u32 
240d0 6e 3b 0a 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20  n;.  i64 n64;.. 
240e0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
240f0 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p2];.  memAbo
24100 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
24110 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20  ut);..  /* Note 
24120 74 68 61 74 20 52 6f 77 4b 65 79 20 61 6e 64 20  that RowKey and 
24130 52 6f 77 44 61 74 61 20 61 72 65 20 72 65 61 6c  RowData are real
24140 6c 79 20 65 78 61 63 74 6c 79 20 74 68 65 20 73  ly exactly the s
24150 61 6d 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ame instruction 
24160 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
24170 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24180 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24190 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
241a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
241b0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
241c0 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
241d0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
241e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
241f0 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
24200 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
24210 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  e==0 || pOp->opc
24220 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
24230 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
24240 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24250 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
24260 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24270 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
24280 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24290 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
242a0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
242b0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
242c0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
242d0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
242e0 72 29 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  r) );..  /* The 
242f0 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50  OP_RowKey and OP
24300 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
24310 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
24320 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
24330 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   ** OP_Rewind/Op
24340 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
24350 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
24360 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ctions that migh
24370 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a  t invalidate.  *
24380 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 48  * the cursor.  H
24390 65 6e 63 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ence the followi
243a0 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  ng sqlite3VdbeCu
243b0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
243c0 6c 20 69 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a  l is always.  **
243d0 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e   a no-op and can
243e0 20 6e 65 76 65 72 20 66 61 69 6c 2e 20 20 42 75   never fail.  Bu
243f0 74 20 77 65 20 6c 65 61 76 65 20 69 74 20 69 6e  t we leave it in
24400 20 70 6c 61 63 65 20 61 73 20 61 20 73 61 66 65   place as a safe
24410 74 79 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ty..  */.  asser
24420 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
24430 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63  oveto==0 );.  rc
24440 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
24450 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
24460 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
24470 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
24480 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24490 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d  rror;..  if( pC-
244a0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
244b0 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e     assert( !pC->
244c0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56  isTable );.    V
244d0 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
244e0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
244f0 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a  e(pCrsr, &n64);.
24500 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
24510 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20  SQLITE_OK );    
24520 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20  /* True because 
24530 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  of CursorMoveto(
24540 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a  ) call above */.
24550 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e      if( n64>db->
24560 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
24570 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
24580 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
24590 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d  g;.    }.    n =
245a0 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c   (u32)n64;.  }el
245b0 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59  se{.    VVA_ONLY
245c0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
245d0 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
245e0 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65  r, &n);.    asse
245f0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
24600 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53  K );    /* DataS
24610 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  ize() cannot fai
24620 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28  l */.    if( n>(
24630 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
24640 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
24650 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  TH] ){.      got
24660 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d  o too_big;.    }
24670 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
24680 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f  e3VdbeMemGrow(pO
24690 75 74 2c 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20  ut, n, 0) ){.   
246a0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
246b0 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b  }.  pOut->n = n;
246c0 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
246d0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62  g(pOut, MEM_Blob
246e0 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  );.  if( pC->isT
246f0 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72  able==0 ){.    r
24700 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24710 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  Key(pCrsr, 0, n,
24720 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c   pOut->z);.  }el
24730 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  se{.    rc = sql
24740 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70 43  ite3BtreeData(pC
24750 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
24760 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >z);.  }.  pOut-
24770 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
24780 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
24790 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
247a0 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
247b0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
247c0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
247d0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
247e0 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
247f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24800 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
24810 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
24820 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
24830 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
24840 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
24850 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
24860 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
24870 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
24880 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
24890 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
248a0 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
248b0 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
248c0 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
248d0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
248e0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
248f0 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
24900 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
24910 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
24920 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
24930 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
24940 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
24950 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
24960 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
24970 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
24980 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
24990 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 43  lease */.  VdbeC
249a0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
249b0 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   v;.  sqlite3_vt
249c0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
249d0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
249e0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
249f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24a00 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24a10 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24a20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24a30 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24a40 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
24a50 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
24a60 65 52 65 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e  eReg==0 || pC->n
24a70 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20  ullRow );.  if( 
24a80 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
24a90 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
24aa0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
24ab0 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
24ac0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
24ad0 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
24ae0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
24af0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
24b00 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24b10 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
24b20 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 29  C->pVtabCursor )
24b30 7b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  {.    pVtab = pC
24b40 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  ->pVtabCursor->p
24b50 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c  Vtab;.    pModul
24b60 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
24b70 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  le;.    assert( 
24b80 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
24b90 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64  );.    rc = pMod
24ba0 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e  ule->xRowid(pC->
24bb0 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 76 29  pVtabCursor, &v)
24bc0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
24bd0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
24be0 20 70 56 74 61 62 29 3b 0a 23 65 6e 64 69 66 20   pVtab);.#endif 
24bf0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
24c00 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20  IRTUALTABLE */. 
24c10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
24c20 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
24c30 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
24c40 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
24c50 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 20 20  Moveto(pC);.    
24c60 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
24c70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
24c80 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 72 6f  ;.    if( pC->ro
24c90 77 69 64 49 73 56 61 6c 69 64 20 29 7b 0a 20 20  widIsValid ){.  
24ca0 20 20 20 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74      v = pC->last
24cb0 52 6f 77 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65  Rowid;.    }else
24cc0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
24cd0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
24ce0 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76  (pC->pCursor, &v
24cf0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
24d00 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
24d10 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20  ;  /* Always so 
24d20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f  because of Curso
24d30 72 4d 6f 76 65 74 6f 28 29 20 61 62 6f 76 65 20  rMoveto() above 
24d40 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  */.    }.  }.  p
24d50 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
24d60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24d70 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
24d80 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
24d90 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
24da0 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
24db0 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
24dc0 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
24dd0 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
24de0 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
24df0 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
24e00 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
24e10 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
24e20 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
24e30 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
24e40 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24e50 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24e60 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24e70 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24e80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24e90 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
24ea0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
24eb0 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c    pC->rowidIsVal
24ec0 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  id = 0;.  pC->ca
24ed0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
24ee0 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70  E_STALE;.  if( p
24ef0 43 2d 3e 70 43 75 72 73 6f 72 20 29 7b 0a 20 20  C->pCursor ){.  
24f00 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
24f10 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 70 43  earCursor(pC->pC
24f20 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
24f30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
24f40 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a 20  e: Last P1 P2 * 
24f50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
24f60 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
24f70 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
24f80 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f   Prev instructio
24f90 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
24fa0 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c  l refer to the l
24fb0 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
24fc0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
24fd0 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
24fe0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
24ff0 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20  ex is empty and 
25000 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  P2>0, then jump 
25010 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
25020 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30  2..** If P2 is 0
25030 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65   or if the table
25040 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
25050 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
25060 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
25070 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
25080 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
25090 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
250a0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
250b0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
250c0 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
250d0 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
250e0 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
250f0 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
25100 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
25110 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
25120 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
25130 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65  ot Next..*/.case
25140 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20   OP_Last: {     
25150 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
25160 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
25170 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
25180 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
25190 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
251a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
251b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
251c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
251d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
251e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73   pC!=0 );.  pCrs
251f0 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
25200 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
25210 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
25220 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
25230 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
25240 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
25250 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
25260 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
25270 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
25280 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
25290 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
252a0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
252b0 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  LE;.#ifdef SQLIT
252c0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
252d0 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a  ekOp = OP_Last;.
252e0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
252f0 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64  ->p2>0 ){.    Vd
25300 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
25310 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
25320 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f 70 2d   res ) pc = pOp-
25330 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
25340 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
25350 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
25360 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
25370 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
25380 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
25390 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
253a0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
253b0 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
253c0 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
253d0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
253e0 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
253f0 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
25400 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
25410 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
25420 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
25430 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
25440 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
25450 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
25460 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
25470 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
25480 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
25490 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
254a0 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
254b0 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
254c0 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
254d0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
254e0 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
254f0 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
25500 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
25510 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
25520 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
25530 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
25540 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
25550 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
25560 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
25570 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a  terSort:    /* j
25580 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ump */.case OP_S
25590 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
255a0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
255b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
255c0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
255d0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
255e0 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
255f0 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
25600 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
25610 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20  ATUS_SORT]++;.  
25620 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
25630 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
25640 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
25650 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
25660 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
25670 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
25680 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
25690 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
256a0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
256b0 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
256c0 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
256d0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
256e0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
256f0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
25700 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
25710 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
25720 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
25730 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
25740 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
25750 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
25760 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
25770 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
25780 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
25790 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
257a0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
257b0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
257c0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
257d0 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
257e0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
257f0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
25800 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
25810 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
25820 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
25830 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
25840 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20  t Prev..*/.case 
25850 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
25860 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
25870 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25880 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
25890 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
258a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
258b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
258c0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
258d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
258e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
258f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
25900 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
25910 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
25920 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20  =OP_SorterSort) 
25930 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69  );.  res = 1;.#i
25940 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25950 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
25960 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64   OP_Rewind;.#end
25970 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  if.  if( isSorte
25980 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
25990 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
259a0 74 65 72 52 65 77 69 6e 64 28 64 62 2c 20 70 43  terRewind(db, pC
259b0 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65  , &res);.  }else
259c0 7b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  {.    pCrsr = pC
259d0 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  ->pCursor;.    a
259e0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
259f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
25a00 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
25a10 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
25a20 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
25a30 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
25a40 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25a50 5f 53 54 41 4c 45 3b 0a 20 20 20 20 70 43 2d 3e  _STALE;.    pC->
25a60 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
25a70 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ;.  }.  pC->null
25a80 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
25a90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
25aa0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
25ab0 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72  >nOp );.  VdbeBr
25ac0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
25ad0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
25ae0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
25af0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
25b00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25b10 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33  e: Next P1 P2 P3
25b20 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76   P4 P5.**.** Adv
25b30 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
25b40 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
25b50 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
25b60 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
25b70 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
25b80 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
25b90 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
25ba0 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
25bb0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
25bc0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
25bd0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
25be0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
25bf0 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
25c00 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
25c10 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
25c20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65  P2..**.** The Ne
25c30 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
25c40 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
25c50 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65  g an SeekGT, See
25c60 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65  kGE, or.** OP_Re
25c70 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64  wind opcode used
25c80 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
25c90 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69   cursor.  Next i
25ca0 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
25cb0 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c   to follow SeekL
25cc0 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50  T, SeekLE, or OP
25cd0 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  _Last..**.** The
25ce0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
25cf0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
25d00 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
25d10 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73  o-table.  P1 mus
25d20 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f  t have.** been o
25d30 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74  pened prior to t
25d40 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68  his opcode or th
25d50 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73  e program will s
25d60 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54  egfault..**.** T
25d70 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
25d80 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
25d90 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
25da0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
25db0 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
25dc0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
25dd0 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
25de0 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
25df0 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
25e00 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
25e10 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
25e20 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
25e30 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
25e40 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
25e50 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
25e60 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
25e70 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
25e80 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
25e90 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
25ea0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
25eb0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
25ec0 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
25ed0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
25ee0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
25ef0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
25f00 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
25f10 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
25f20 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
25f30 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
25f40 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a  , NextIfOpen.*/.
25f50 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49  /* Opcode: NextI
25f60 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
25f70 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
25f80 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
25f90 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65  t like Next exce
25fa0 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
25fb0 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
25fc0 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
25fd0 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70   no-op..*/./* Op
25fe0 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
25ff0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
26000 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
26010 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
26020 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
26030 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
26040 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
26050 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
26060 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
26070 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
26080 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
26090 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
260a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
260b0 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
260c0 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
260d0 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
260e0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
260f0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
26100 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  **.** The Prev o
26110 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
26120 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
26130 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
26140 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f   or.** OP_Last o
26150 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
26160 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
26170 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20  r.  Prev is not 
26180 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
26190 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65  llow SeekGT, See
261a0 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e  kGE, or OP_Rewin
261b0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  d..**.** The P1 
261c0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
261d0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
261e0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
261f0 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a  ble.  If P1 is.*
26200 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20  * not open then 
26210 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
26220 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
26230 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
26240 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
26250 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
26260 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
26270 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
26280 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
26290 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
262a0 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
262b0 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
262c0 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
262d0 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
262e0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
262f0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
26300 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
26310 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
26320 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
26330 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
26340 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
26350 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
26360 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
26370 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
26380 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
26390 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
263a0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
263b0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
263c0 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
263d0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
263e0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
263f0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
26400 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32  PrevIfOpen P1 P2
26410 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
26420 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
26430 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76  s just like Prev
26440 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
26450 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
26460 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
26470 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
26480 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65  case OP_SorterNe
26490 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a  xt: {  /* jump *
264a0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
264b0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  pC;.  int res;..
264c0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
264d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
264e0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
264f0 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
26500 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
26510 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20  eSorterNext(db, 
26520 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74  pC, &res);.  got
26530 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73  o next_tail;.cas
26540 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a  e OP_PrevIfOpen:
26550 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
26560 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65  ase OP_NextIfOpe
26570 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
26580 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b  .  if( p->apCsr[
26590 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72  pOp->p1]==0 ) br
265a0 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
265b0 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f  hrough */.case O
265c0 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
265d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
265e0 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20   OP_Next:       
265f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
26600 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26610 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26620 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
26630 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72  sert( pOp->p5<Ar
26640 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
26650 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
26660 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26670 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70  ;.  res = pOp->p
26680 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  3;.  assert( pC!
26690 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
266a0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
266b0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
266c0 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 20 29  t( pC->pCursor )
266d0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d  ;.  assert( res=
266e0 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26  =0 || (res==1 &&
266f0 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29   pC->isTable==0)
26700 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
26710 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65  res==1 );.  asse
26720 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
26730 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
26740 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
26750 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
26760 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26770 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
26780 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
26790 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
267a0 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20  eePrevious );.  
267b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
267c0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
267d0 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
267e0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
267f0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
26800 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
26810 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
26820 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
26830 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
26840 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20  eePrevious);..  
26850 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  /* The Next opco
26860 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
26870 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65  after SeekGT, Se
26880 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64  ekGE, and Rewind
26890 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20  ..  ** The Prev 
268a0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75  opcode is only u
268b0 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54  sed after SeekLT
268c0 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61  , SeekLE, and La
268d0 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  st. */.  assert(
268e0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
268f0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Next || pOp->op
26900 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f  code!=OP_NextIfO
26910 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
26920 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
26930 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
26940 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
26950 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
26960 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
26970 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
26980 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28  ound);.  assert(
26990 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
269a0 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Prev || pOp->op
269b0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
269c0 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  pen.       || pC
269d0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
269e0 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kLT || pC->seekO
269f0 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20  p==OP_SeekLE.   
26a00 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
26a10 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20  p==OP_Last );.. 
26a20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
26a30 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75 72 73  dvance(pC->pCurs
26a40 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f  or, &res);.next_
26a50 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68  tail:.  pC->cach
26a60 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
26a70 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61  STALE;.  VdbeBra
26a80 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c  nchTaken(res==0,
26a90 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  2);.  if( res==0
26aa0 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c   ){.    pC->null
26ab0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 63 20  Row = 0;.    pc 
26ac0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
26ad0 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70     p->aCounter[p
26ae0 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65  Op->p5]++;.#ifde
26af0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
26b00 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
26b10 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
26b20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
26b30 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
26b40 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73   }.  pC->rowidIs
26b50 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67 6f 74  Valid = 0;.  got
26b60 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
26b70 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
26b80 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50  ode: IdxInsert P
26b90 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20  1 P2 P3 * P5.** 
26ba0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
26bb0 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P2].**.** Regist
26bc0 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53  er P2 holds an S
26bd0 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64  QL index key mad
26be0 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d  e using the.** M
26bf0 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
26c00 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70  ctions.  This op
26c10 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74  code writes that
26c20 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65   key.** into the
26c30 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61   index P1.  Data
26c40 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
26c50 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  s nil..**.** P3 
26c60 69 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70  is a flag that p
26c70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74  rovides a hint t
26c80 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
26c90 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20  er that this.** 
26ca0 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
26cb0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
26cc0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
26cd0 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  s the OPFLAG_NCH
26ce0 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68  ANGE bit set, th
26cf0 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
26d00 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72  unter is.** incr
26d10 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  emented by this 
26d20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
26d30 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
26d40 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  NGE bit is clear
26d50 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68  ,.** then the ch
26d60 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
26d70 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a  unchanged..**.**
26d80 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
26d90 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
26da0 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68 65  ULT bit set, the
26db0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73  n the cursor mus
26dc0 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64  t have.** just d
26dd0 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68  one a seek to th
26de0 65 20 73 70 6f 74 20 77 68 65 72 65 20 74 68 65  e spot where the
26df0 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f   new entry is to
26e00 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a   be inserted..**
26e10 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64   This flag avoid
26e20 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61  s doing an extra
26e30 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   seek..**.** Thi
26e40 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
26e50 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64  ly works for ind
26e60 69 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  ices.  The equiv
26e70 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
26e80 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20  n.** for tables 
26e90 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f  is OP_Insert..*/
26ea0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
26eb0 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
26ec0 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in2 */.case OP_I
26ed0 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
26ee0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
26ef0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26f00 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
26f10 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20  ;.  int nKey;.  
26f20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79  const char *zKey
26f30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
26f40 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26f50 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26f60 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26f70 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
26f80 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
26f90 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
26fa0 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
26fb0 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
26fc0 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d  ert) );.  pIn2 =
26fd0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
26fe0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d  .  assert( pIn2-
26ff0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
27000 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  b );.  pCrsr = p
27010 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 69 66  C->pCursor;.  if
27020 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
27030 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
27040 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73  nChange++;.  ass
27050 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
27060 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
27070 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72  sTable==0 );.  r
27080 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
27090 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  In2);.  if( rc==
270a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
270b0 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
270c0 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
270d0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
270e0 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c 20 70  rWrite(db, pC, p
270f0 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  In2);.    }else{
27100 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49  .      nKey = pI
27110 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65  n2->n;.      zKe
27120 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
27130 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
27140 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72  treeInsert(pCrsr
27150 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22  , zKey, nKey, ""
27160 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c  , 0, 0, pOp->p3,
27170 20 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f   .          ((pO
27180 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
27190 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
271a0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
271b0 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b   0).          );
271c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
271d0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
271e0 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43  o==0 );.      pC
271f0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
27200 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
27210 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
27220 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
27230 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
27240 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
27250 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
27260 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
27270 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
27280 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
27290 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
272a0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
272b0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
272c0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
272d0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
272e0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
272f0 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
27300 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
27310 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
27320 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
27330 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
27340 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
27350 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
27360 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
27370 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27380 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
27390 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
273a0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
273b0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
273c0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
273d0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
273e0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
273f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27400 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
27410 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
27420 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
27430 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
27440 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
27450 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  0 );.  r.pKeyInf
27460 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
27470 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
27480 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72  u16)pOp->p3;.  r
27490 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
274a0 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
274b0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64  m[pOp->p2];.#ifd
274c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
274d0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
274e0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
274f0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
27500 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
27510 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
27520 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27530 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
27540 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
27550 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
27560 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
27570 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
27580 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
27590 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20  Delete(pCrsr);. 
275a0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d   }.  assert( pC-
275b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
275c0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  =0 );.  pC->cach
275d0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
275e0 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
275f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
27600 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
27610 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
27620 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
27630 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
27640 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
27650 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
27660 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
27670 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
27680 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
27690 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
276a0 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
276b0 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
276c0 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
276d0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
276e0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
276f0 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
27700 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
27710 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
27720 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
27730 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  /.case OP_IdxRow
27740 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
27750 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27760 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72  lease */.  BtCur
27770 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64  sor *pCrsr;.  Vd
27780 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
27790 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73  i64 rowid;..  as
277a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
277b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
277c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
277d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
277e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
277f0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
27800 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
27810 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
27820 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
27830 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
27840 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27850 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
27860 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  ;.  if( NEVER(rc
27870 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
27880 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 61  ue_to_error;.  a
27890 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
278a0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
278b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
278c0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66  Table==0 );.  if
278d0 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ( !pC->nullRow )
278e0 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b  {.    rowid = 0;
278f0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
27900 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
27910 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
27920 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
27930 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
27940 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f  d(db, pCrsr, &ro
27950 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63  wid);.    if( rc
27960 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
27970 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
27980 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
27990 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
279a0 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70  i = rowid;.    p
279b0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
279c0 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _Int;.  }.  brea
279d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
279e0 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
279f0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
27a00 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
27a10 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
27a20 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
27a30 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
27a40 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
27a50 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
27a60 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
27a70 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
27a80 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
27a90 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
27aa0 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
27ab0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27ac0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27ad0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27ae0 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
27af0 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
27b00 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
27b10 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
27b20 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
27b30 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
27b40 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
27b50 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
27b60 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
27b70 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
27b80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
27b90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
27ba0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
27bb0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
27bc0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
27bd0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
27be0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
27bf0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
27c00 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
27c10 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
27c20 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
27c30 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
27c40 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
27c50 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
27c60 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
27c70 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
27c80 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
27c90 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
27ca0 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
27cb0 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
27cc0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
27cd0 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
27ce0 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
27cf0 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
27d00 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
27d10 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
27d20 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
27d30 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
27d40 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54  /* Opcode: IdxLT
27d50 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27d60 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
27d70 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
27d80 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
27d90 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
27da0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
27db0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
27dc0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
27dd0 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
27de0 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
27df0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
27e00 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
27e10 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
27e20 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27e30 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27e40 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
27e50 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
27e60 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
27e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
27e80 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
27e90 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
27ea0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
27eb0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
27ec0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
27ed0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
27ee0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
27ef0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45  /* Opcode: IdxLE
27f00 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27f10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
27f20 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
27f30 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
27f40 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
27f50 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
27f60 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
27f70 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
27f80 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
27f90 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
27fa0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
27fb0 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
27fc0 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
27fd0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27fe0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27ff0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
28000 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
28010 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
28020 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
28030 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
28040 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
28050 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
28060 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a  alue then jump.*
28070 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
28080 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
28090 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
280a0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
280b0 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20   OP_IdxLE:      
280c0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
280d0 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20  ase OP_IdxGT:   
280e0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
280f0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a  /.case OP_IdxLT:
28100 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
28110 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
28120 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20  GE:  {       /* 
28130 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
28140 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
28150 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
28160 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
28170 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28180 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28190 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
281a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
281b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
281c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
281d0 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
281e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
281f0 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
28200 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
28210 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
28220 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
28230 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
28240 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28250 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
28260 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
28270 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
28280 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
28290 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
282a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
282b0 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
282c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
282d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
282e0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
282f0 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
28300 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
28310 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
28320 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
28330 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
28340 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
28350 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
28360 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
28370 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
28380 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
28390 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
283a0 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
283b0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
283c0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
283d0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
283e0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
283f0 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
28400 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
28410 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
28420 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
28430 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
28440 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
28450 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65 73 29  re(pC, &r, &res)
28460 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f  ;.  assert( (OP_
28470 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxLE&1)==(OP_Id
28480 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64  xLT&1) && (OP_Id
28490 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47  xGE&1)==(OP_IdxG
284a0 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70  T&1) );.  if( (p
284b0 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28  Op->opcode&1)==(
284c0 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20  OP_IdxLT&1) ){. 
284d0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
284e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
284f0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
28500 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
28510 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d   res = -res;.  }
28520 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28530 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
28540 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
28550 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
28560 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20   );.    res++;. 
28570 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
28580 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20  aken(res>0,2);. 
28590 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a 20 20   if( res>0 ){.  
285a0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
285b0 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1 ;.  }.  break
285c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
285d0 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33  Destroy P1 P2 P3
285e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
285f0 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61  e an entire data
28600 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
28610 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  dex whose root p
28620 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  age in the datab
28630 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67  ase.** file is g
28640 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a  iven by P1..**.*
28650 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
28660 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69  g destroyed is i
28670 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
28680 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d  ase file if P3==
28690 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20  0.  If.** P3==1 
286a0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
286b0 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
286c0 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
286d0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
286e0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
286f0 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
28700 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
28710 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
28720 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56  ..**.** If AUTOV
28730 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64  ACUUM is enabled
28740 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73   then it is poss
28750 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65  ible that anothe
28760 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d  r root page.** m
28770 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e  ight be moved in
28780 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c  to the newly del
28790 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69  eted root page i
287a0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
287b0 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  all.** root page
287c0 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20  s contiguous at 
287d0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
287e0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
287f0 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61  The former.** va
28800 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20  lue of the root 
28810 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20  page that moved 
28820 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f  - its value befo
28830 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75  re the move occu
28840 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f  rred -.** is sto
28850 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
28860 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65 20  P2.  If no page 
28870 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73  .** movement was
28880 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61 75   required (becau
28890 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  se the table bei
288a0 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61  ng dropped was a
288b0 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c  lready .** the l
288c0 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20 64  ast one in the d
288d0 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61 20  atabase) then a 
288e0 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
288f0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
28900 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
28910 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e  is disabled then
28920 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65   a zero is store
28930 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
28940 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
28950 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20  : Clear.*/.case 
28960 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20  OP_Destroy: {   
28970 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
28980 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  ease */.  int iM
28990 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43 6e 74  oved;.  int iCnt
289a0 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  ;.  Vdbe *pVdbe;
289b0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
289c0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
289d0 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66  ly==0 );.#ifndef
289e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
289f0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43 6e 74  TUALTABLE.  iCnt
28a00 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56 64 62   = 0;.  for(pVdb
28a10 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70 56 64  e=db->pVdbe; pVd
28a20 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56 64 62  be; pVdbe = pVdb
28a30 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 69  e->pNext){.    i
28a40 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69 63 3d  f( pVdbe->magic=
28a50 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20  =VDBE_MAGIC_RUN 
28a60 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52 65 61  && pVdbe->bIsRea
28a70 64 65 72 20 0a 20 20 20 20 20 26 26 20 70 56 64  der .     && pVd
28a80 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64  be->inVtabMethod
28a90 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70 63 3e  <2 && pVdbe->pc>
28aa0 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  =0 .    ){.     
28ab0 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20   iCnt++;.    }. 
28ac0 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e 74 20   }.#else.  iCnt 
28ad0 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3b  = db->nVdbeRead;
28ae0 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74 2d 3e  .#endif.  pOut->
28af0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
28b00 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31 20 29  ;.  if( iCnt>1 )
28b10 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
28b20 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
28b30 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
28b40 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73 65  E_Abort;.  }else
28b50 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
28b60 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
28b70 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20 20 20   iCnt==1 );.    
28b80 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
28b90 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
28ba0 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f   iDb) );.    iMo
28bb0 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ved = 0;  /* Not
28bc0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74   needed.  Only t
28bd0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
28be0 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
28bf0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f   sqlite3BtreeDro
28c00 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69  pTable(db->aDb[i
28c10 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  Db].pBt, pOp->p1
28c20 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20  , &iMoved);.    
28c30 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
28c40 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
28c50 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23  >u.i = iMoved;.#
28c60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28c70 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
28c80 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
28c90 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30  _OK && iMoved!=0
28ca0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
28cb0 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64  3RootPageMoved(d
28cc0 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20  b, iDb, iMoved, 
28cd0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20  pOp->p1);.      
28ce0 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f  /* All OP_Destro
28cf0 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63  y operations occ
28d00 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62  ur on the same b
28d10 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73  tree */.      as
28d20 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d  sert( resetSchem
28d30 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72  aOnFault==0 || r
28d40 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
28d50 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20  t==iDb+1 );.    
28d60 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46    resetSchemaOnF
28d70 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20  ault = iDb+1;.  
28d80 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
28d90 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28da0 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50  code: Clear P1 P
28db0 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  2 P3.**.** Delet
28dc0 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f  e all contents o
28dd0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
28de0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
28df0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  ose root page.**
28e00 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28e10 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
28e20 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69  y P1.  But, unli
28e30 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e  ke Destroy, do n
28e40 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65  ot.** remove the
28e50 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28e60 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
28e70 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
28e80 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
28e90 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61  ear is in the ma
28ea0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
28eb0 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a   if P2==0.  If.*
28ec0 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P2==1 then the
28ed0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
28ee0 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
28ef0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
28f00 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
28f10 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
28f20 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
28f30 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
28f40 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
28f50 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
28f60 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
28f70 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65  n the table refe
28f80 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20  rred to must be 
28f90 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62  an.** intkey tab
28fa0 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65  le (an SQL table
28fb0 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e  , not an index).
28fc0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
28fd0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a  e row change .**
28fe0 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
28ff0 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
29000 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
29010 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
29020 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50  leared. .** If P
29030 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
29040 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n zero, then the
29050 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e   value stored in
29060 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a   register P3 is.
29070 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e  ** also incremen
29080 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
29090 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
290a0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
290b0 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ared..**.** See 
290c0 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f  also: Destroy.*/
290d0 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20  .case OP_Clear: 
290e0 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  {.  int nChange;
290f0 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  . .  nChange = 0
29100 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
29110 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
29120 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
29130 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
29140 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72   pOp->p2) );.  r
29150 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29160 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
29170 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
29180 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
29190 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
291a0 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
291b0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
291c0 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
291d0 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
291e0 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
291f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
29200 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
29210 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
29220 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
29230 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
29240 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
29250 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
29260 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
29270 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
29280 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
29290 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
292a0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
292b0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
292c0 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
292d0 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
292e0 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
292f0 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
29300 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
29310 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
29320 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
29330 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
29340 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
29350 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
29360 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
29370 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
29380 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
29390 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
293a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
293b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
293c0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
293d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
293e0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
293f0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  !=0 );.  if( pC-
29400 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20 20 20  >pSorter ){.    
29410 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
29420 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 70  rReset(db, pC->p
29430 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
29440 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
29450 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
29460 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
29470 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
29480 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75  OfCursor(pC->pCu
29490 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
294a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
294b0 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
294c0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
294d0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
294e0 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
294f0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
29500 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
29510 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
29520 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
29530 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
29540 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
29550 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
29560 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
29570 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
29580 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
29590 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
295a0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
295b0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
295c0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
295d0 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
295e0 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
295f0 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
29600 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
29610 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
29620 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
29630 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
29640 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
29650 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
29660 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
29670 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
29680 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
29690 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
296a0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
296b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
296c0 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
296d0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
296e0 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
296f0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
29700 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
29710 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
29720 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
29730 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
29740 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
29750 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
29760 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
29770 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
29780 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
29790 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
297a0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
297b0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
297c0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
297d0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
297e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
297f0 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
29800 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
29810 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
29820 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
29830 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
29840 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
29850 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
29860 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61 67  pgno;.  int flag
29870 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20  s;.  Db *pDb;.. 
29880 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
29890 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
298a0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
298b0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
298c0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
298d0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
298e0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
298f0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
29900 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
29910 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
29920 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
29930 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
29940 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
29950 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
29960 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
29970 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
29980 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
29990 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
299a0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
299b0 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
299c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
299d0 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
299e0 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
299f0 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
29a00 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
29a10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
29a20 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
29a30 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
29a40 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
29a50 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
29a60 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
29a70 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
29a80 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
29a90 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
29aa0 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
29ab0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
29ac0 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
29ad0 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
29ae0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
29af0 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
29b00 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
29b10 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
29b20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
29b30 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
29b40 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
29b50 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
29b60 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
29b70 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
29b80 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
29b90 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
29ba0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
29bb0 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
29bc0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
29bd0 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
29be0 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
29bf0 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
29c00 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
29c10 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
29c20 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
29c30 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
29c40 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
29c50 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
29c60 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
29c70 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
29c80 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
29c90 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
29ca0 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
29cb0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
29cc0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
29cd0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
29ce0 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
29cf0 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
29d00 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
29d10 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
29d20 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
29d30 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
29d40 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
29d50 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
29d60 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
29d70 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
29d80 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
29d90 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
29da0 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
29db0 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
29dc0 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
29dd0 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
29de0 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
29df0 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
29e00 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
29e10 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
29e20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
29e30 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
29e40 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
29e50 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
29e60 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
29e70 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
29e80 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
29e90 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
29ea0 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
29eb0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
29ec0 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
29ed0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
29ee0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
29ef0 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
29f00 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
29f10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
29f20 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
29f30 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
29f40 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
29f50 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
29f60 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
29f70 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
29f80 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
29f90 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
29fa0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
29fb0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
29fc0 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74    if( rc ) sqlit
29fd0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
29fe0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
29ff0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2a000 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
2a010 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2a020 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
2a030 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2a040 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
2a050 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
2a060 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
2a070 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
2a080 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
2a090 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
2a0a0 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
2a0b0 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
2a0c0 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
2a0d0 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
2a0e0 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
2a0f0 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
2a100 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
2a110 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
2a120 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
2a130 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
2a140 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
2a150 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
2a160 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2a170 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2a180 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
2a190 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
2a1a0 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
2a1b0 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
2a1c0 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
2a1d0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2a1e0 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
2a1f0 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
2a200 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2a210 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2a220 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2a230 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2a240 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2a250 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
2a260 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2a270 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2a280 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
2a290 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
2a2a0 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
2a2b0 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
2a2c0 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
2a2d0 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
2a2e0 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
2a2f0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
2a300 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
2a310 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
2a320 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
2a330 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a  se OP_DropTable:
2a340 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2a350 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
2a360 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2a370 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2a380 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2a390 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
2a3a0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2a3b0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2a3c0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2a3d0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2a3e0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2a3f0 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
2a400 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2a410 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2a420 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
2a430 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2a440 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2a450 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2a460 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
2a470 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
2a480 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2a490 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2a4a0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2a4b0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2a4c0 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2a4d0 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
2a4e0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a4f0 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70  eleteIndex(db, p
2a500 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2a510 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2a520 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
2a530 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34  rigger P1 * * P4
2a540 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2a550 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2a560 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2a570 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2a580 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72  scribe.** the tr
2a590 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69  igger named P4 i
2a5a0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2a5b0 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2a5c0 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a  fter a trigger.*
2a5d0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2a5e0 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2a5f0 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2a600 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
2a610 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
2a620 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2a630 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2a640 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2a650 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2a660 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2a670 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20  DropTrigger: {. 
2a680 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2a690 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64  dDeleteTrigger(d
2a6a0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2a6b0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2a6c0 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
2a6d0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2a6e0 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f  TY_CHECK./* Opco
2a6f0 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20  de: IntegrityCk 
2a700 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a  P1 P2 P3 * P5.**
2a710 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
2a720 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
2a730 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
2a740 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
2a750 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
2a760 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
2a770 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
2a780 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
2a790 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
2a7a0 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
2a7b0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
2a7c0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2a7d0 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
2a7e0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
2a7f0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
2a800 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
2a810 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
2a820 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
2a830 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
2a840 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2a850 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
2a860 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
2a870 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
2a880 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
2a890 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
2a8a0 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
2a8b0 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
2a8c0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
2a8d0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
2a8e0 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
2a8f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
2a900 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73 74 6f  e integer.** sto
2a910 72 65 64 20 69 6e 20 72 65 67 28 50 31 29 2c 20  red in reg(P1), 
2a920 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67 28 50  reg(P1+1), reg(P
2a930 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68 65 72  1+2), ....  Ther
2a940 65 20 61 72 65 20 50 32 20 74 61 62 6c 65 73 0a  e are P2 tables.
2a950 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20  ** total..**.** 
2a960 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
2a970 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20  o, the check is 
2a980 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69  done on the auxi
2a990 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a  liary database.*
2a9a0 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20  * file, not the 
2a9b0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2a9c0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  le..**.** This o
2a9d0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
2a9e0 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69   implement the i
2a9f0 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70  ntegrity_check p
2aa00 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ragma..*/.case O
2aa10 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b  P_IntegrityCk: {
2aa20 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20  .  int nRoot;   
2aa30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2aa40 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e  tables to check.
2aa50 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f    (Number of roo
2aa60 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69  t pages.) */.  i
2aa70 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f  nt *aRoot;     /
2aa80 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70  * Array of rootp
2aa90 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
2aaa0 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65  tables to be che
2aab0 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  cked */.  int j;
2aac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2aad0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2aae0 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
2aaf0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
2ab00 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
2ab10 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
2ab20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
2ab30 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
2ab40 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
2ab50 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
2ab60 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
2ab70 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
2ab80 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
2ab90 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
2aba0 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
2abb0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
2abc0 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  >0 );.  aRoot = 
2abd0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
2abe0 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 69 6e  aw(db, sizeof(in
2abf0 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a  t)*(nRoot+1) );.
2ac00 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30 20 29    if( aRoot==0 )
2ac10 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2ac20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2ac30 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
2ac40 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
2ac50 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
2ac60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2ac70 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2ac80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2ac90 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
2aca0 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2acb0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2acc0 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
2acd0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2ace0 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b  >p1];.  for(j=0;
2acf0 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a   j<nRoot; j++){.
2ad00 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28      aRoot[j] = (
2ad10 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62 65 49  int)sqlite3VdbeI
2ad20 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b 6a 5d  ntValue(&pIn1[j]
2ad30 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a  );.  }.  aRoot[j
2ad40 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  ] = 0;.  assert(
2ad50 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
2ad60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2ad70 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2ad80 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
2ad90 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2ada0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
2adb0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
2adc0 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
2add0 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adf0 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
2ae00 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
2ae10 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
2ae20 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
2ae30 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2ae40 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
2ae50 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2ae60 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
2ae70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2ae80 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
2ae90 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
2aea0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2aeb0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
2aec0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2aed0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2aee0 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2aef0 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2af00 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2af10 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2af20 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2af30 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2af40 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2af50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2af60 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2af70 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2af80 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2af90 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2afa0 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74  ynopsis:  rowset
2afb0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
2afc0 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
2afd0 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
2afe0 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
2aff0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
2b000 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
2b010 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2b020 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2b030 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
2b040 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2b050 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
2b060 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
2b070 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
2b080 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2b090 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
2b0a0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2b0b0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
2b0c0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2b0d0 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
2b0e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2b0f0 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
2b100 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2b110 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
2b120 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2b130 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2b140 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2b150 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
2b160 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
2b170 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
2b180 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
2b190 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b1a0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
2b1b0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2b1c0 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77  psis:  r[P3]=row
2b1d0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
2b1e0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
2b1f0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
2b200 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
2b210 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
2b220 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2b230 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
2b240 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
2b250 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
2b260 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
2b270 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
2b280 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
2b290 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
2b2a0 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
2b2b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
2b2c0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
2b2d0 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20   val;..  pIn1 = 
2b2e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2b2f0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2b300 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2b310 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
2b320 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
2b330 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
2b340 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
2b350 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
2b360 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
2b370 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2b380 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
2b390 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
2b3a0 70 32 20 2d 20 31 3b 0a 20 20 20 20 56 64 62 65  p2 - 1;.    Vdbe
2b3b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
2b3c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
2b3d0 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
2b3e0 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
2b3f0 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  dex */.    sqlit
2b400 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2b410 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
2b420 2c 20 76 61 6c 29 3b 0a 20 20 20 20 56 64 62 65  , val);.    Vdbe
2b430 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
2b440 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
2b450 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2b460 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2b470 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
2b480 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
2b490 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
2b4a0 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
2b4b0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
2b4c0 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
2b4d0 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
2b4e0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
2b4f0 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
2b500 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
2b510 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
2b520 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
2b530 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
2b540 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
2b550 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
2b560 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
2b570 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
2b580 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
2b590 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
2b5a0 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
2b5b0 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
2b5c0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
2b5d0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
2b5e0 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
2b5f0 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
2b600 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
2b610 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
2b620 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
2b630 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
2b640 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
2b650 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
2b660 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
2b670 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
2b680 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
2b690 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
2b6a0 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
2b6b0 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
2b6c0 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
2b6d0 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
2b6e0 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
2b6f0 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
2b700 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
2b710 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
2b720 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
2b730 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
2b740 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
2b750 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
2b760 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
2b770 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
2b780 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
2b790 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
2b7a0 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
2b7b0 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
2b7c0 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
2b7d0 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
2b7e0 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
2b7f0 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
2b800 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
2b810 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
2b820 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
2b830 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
2b840 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
2b850 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
2b860 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
2b870 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
2b880 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
2b890 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
2b8a0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
2b8b0 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
2b8c0 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
2b8d0 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
2b8e0 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
2b8f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2b900 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
2b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b920 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
2b930 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
2b940 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
2b950 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2b960 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
2b970 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2b980 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34    iSet = pOp->p4
2b990 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
2b9a0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
2b9b0 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
2b9c0 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
2b9d0 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
2b9e0 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
2b9f0 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
2ba00 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
2ba10 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
2ba20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
2ba30 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
2ba40 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2ba50 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2ba60 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2ba70 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
2ba80 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
2ba90 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2baa0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
2bab0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2bac0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2bad0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2bae0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
2baf0 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
2bb00 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
2bb10 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  ){.    exists = 
2bb20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
2bb30 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2bb40 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75  t, iSet, pIn3->u
2bb50 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  .i);.    VdbeBra
2bb60 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21  nchTaken(exists!
2bb70 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65  =0,2);.    if( e
2bb80 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20 20 70  xists ){.      p
2bb90 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2bba0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2bbb0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 53    }.  }.  if( iS
2bbc0 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
2bbd0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2bbe0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2bbf0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2bc00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
2bc10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bc20 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
2bc30 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
2bc40 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2bc50 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2bc60 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2bc70 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
2bc80 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
2bc90 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
2bca0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2bcb0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
2bcc0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
2bcd0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
2bce0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
2bcf0 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
2bd00 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
2bd10 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
2bd20 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
2bd30 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2bd40 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2bd50 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
2bd60 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
2bd70 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
2bd80 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
2bd90 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
2bda0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2bdb0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
2bdc0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
2bdd0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
2bde0 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
2bdf0 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
2be00 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
2be10 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
2be20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
2be30 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
2be40 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2be50 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
2be60 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
2be70 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
2be80 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
2be90 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
2bea0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
2beb0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
2bec0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
2bed0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
2bee0 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
2bef0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2bf00 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
2bf10 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
2bf20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2bf30 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2bf50 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
2bf60 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
2bf70 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2bf80 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2bfa0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
2bfb0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
2bfc0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
2bfd0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2bfe0 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
2bff0 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
2c000 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
2c010 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
2c020 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
2c030 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
2c040 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
2c050 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
2c060 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
2c070 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
2c080 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
2c090 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
2c0a0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
2c0b0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
2c0c0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
2c0d0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
2c0e0 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
2c0f0 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
2c100 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
2c110 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
2c120 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2c130 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2c140 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
2c150 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
2c160 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
2c170 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
2c180 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2c190 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
2c1a0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
2c1b0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
2c1c0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
2c1d0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
2c1e0 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
2c1f0 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
2c200 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
2c210 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
2c220 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
2c230 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
2c240 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
2c250 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
2c260 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
2c270 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
2c280 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2c290 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
2c2a0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
2c2b0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
2c2c0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
2c2d0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
2c2e0 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
2c2f0 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
2c300 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
2c310 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
2c320 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
2c330 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
2c340 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
2c350 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
2c360 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
2c370 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
2c380 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
2c390 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
2c3a0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
2c3b0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
2c3c0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
2c3d0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
2c3e0 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
2c3f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
2c400 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
2c410 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
2c420 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2c430 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
2c440 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
2c450 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2c460 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
2c470 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
2c480 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
2c490 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
2c4a0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
2c4b0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
2c4c0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2c4d0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
2c4e0 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
2c4f0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 74  >zErrMsg, db, "t
2c500 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
2c510 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
2c520 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65 61 6b  ion");.    break
2c530 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
2c540 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
2c550 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
2c560 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
2c570 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
2c580 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
2c590 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
2c5a0 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
2c5b0 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
2c5c0 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
2c5d0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2c5e0 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
2c5f0 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
2c600 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
2c610 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
2c620 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
2c630 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
2c640 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
2c650 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
2c660 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72  Rt->flags&MEM_Fr
2c670 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ame)==0 ){.    /
2c680 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65  * SubProgram.nMe
2c690 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  m is set to the 
2c6a0 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
2c6b0 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74   cells used by t
2c6c0 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72  he .    ** progr
2c6d0 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62  am stored in Sub
2c6e0 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20  Program.aOp. As 
2c6f0 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f  well as these, o
2c700 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a  ne memory.    **
2c710 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65   cell is require
2c720 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f  d for each curso
2c730 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  r used by the pr
2c740 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c  ogram. Set local
2c750 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  .    ** variable
2c760 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72   nMem (and later
2c770 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69  , VdbeFrame.nChi
2c780 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76  ldMem) to this v
2c790 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  alue..    */.   
2c7a0 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d   nMem = pProgram
2c7b0 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61  ->nMem + pProgra
2c7c0 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e 42 79  m->nCsr;.    nBy
2c7d0 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65  te = ROUND8(size
2c7e0 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20  of(VdbeFrame)). 
2c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e               + n
2c800 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d  Mem * sizeof(Mem
2c810 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2c820 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2c830 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75   * sizeof(VdbeCu
2c840 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20  rsor *).        
2c850 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
2c860 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66  ->nOnce * sizeof
2c870 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65  (u8);.    pFrame
2c880 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
2c890 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
2c8a0 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
2c8b0 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
2c8c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2c8d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2c8e0 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
2c8f0 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
2c900 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
2c910 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
2c920 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
2c930 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
2c940 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2c950 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
2c960 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
2c970 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
2c980 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
2c990 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61 6d 65  = pc;.    pFrame
2c9a0 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d  ->aMem = p->aMem
2c9b0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d  ;.    pFrame->nM
2c9c0 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20  em = p->nMem;.  
2c9d0 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20    pFrame->apCsr 
2c9e0 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20  = p->apCsr;.    
2c9f0 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20  pFrame->nCursor 
2ca00 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20  = p->nCursor;.  
2ca10 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20    pFrame->aOp = 
2ca20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->aOp;.    pFra
2ca30 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70  me->nOp = p->nOp
2ca40 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f  ;.    pFrame->to
2ca50 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  ken = pProgram->
2ca60 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72 61 6d  token;.    pFram
2ca70 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->aOnceFlag = p
2ca80 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20 20 20  ->aOnceFlag;.   
2ca90 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c   pFrame->nOnceFl
2caa0 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ag = p->nOnceFla
2cab0 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  g;..    pEnd = &
2cac0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
2cad0 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
2cae0 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
2caf0 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
2cb00 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
2cb10 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
2cb20 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
2cb30 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
2cb40 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
2cb50 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
2cb60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
2cb70 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61  me = pRt->u.pFra
2cb80 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  me;.    assert( 
2cb90 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70  pProgram->nMem+p
2cba0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
2cbb0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
2cbc0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2cbd0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
2cbe0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2cbf0 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
2cc00 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20   pc==pFrame->pc 
2cc10 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72  );.  }..  p->nFr
2cc20 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d  ame++;.  pFrame-
2cc30 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46  >pParent = p->pF
2cc40 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  rame;.  pFrame->
2cc50 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
2cc60 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
2cc70 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
2cc80 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43 68 61  hange;.  p->nCha
2cc90 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46  nge = 0;.  p->pF
2cca0 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20  rame = pFrame;. 
2ccb0 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20   p->aMem = aMem 
2ccc0 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2ccd0 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70  pFrame)[-1];.  p
2cce0 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d  ->nMem = pFrame-
2ccf0 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d  >nChildMem;.  p-
2cd00 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29  >nCursor = (u16)
2cd10 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
2cd20 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20  r;.  p->apCsr = 
2cd30 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26  (VdbeCursor **)&
2cd40 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b  aMem[p->nMem+1];
2cd50 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20  .  p->aOp = aOp 
2cd60 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b  = pProgram->aOp;
2cd70 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f  .  p->nOp = pPro
2cd80 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e  gram->nOp;.  p->
2cd90 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20  aOnceFlag = (u8 
2cda0 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e  *)&p->apCsr[p->n
2cdb0 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f  Cursor];.  p->nO
2cdc0 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72  nceFlag = pProgr
2cdd0 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70 63 20  am->nOnce;.  pc 
2cde0 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74 28 70  = -1;.  memset(p
2cdf0 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30 2c 20  ->aOnceFlag, 0, 
2ce00 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a  p->nOnceFlag);..
2ce10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ce20 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
2ce30 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2ce40 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
2ce50 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
2ce60 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
2ce70 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
2ce80 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
2ce90 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
2cea0 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
2ceb0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
2cec0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
2ced0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
2cee0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
2cef0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
2cf00 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
2cf10 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
2cf20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
2cf30 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
2cf40 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
2cf50 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
2cf60 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
2cf70 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
2cf80 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
2cf90 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
2cfa0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
2cfb0 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
2cfc0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2cfd0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
2cfe0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
2cff0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
2d000 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
2d010 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
2d020 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
2d030 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
2d040 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
2d050 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2d060 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
2d070 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  In;.  pFrame = p
2d080 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
2d090 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
2d0a0 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
2d0b0 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
2d0c0 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
2d0d0 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
2d0e0 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
2d0f0 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
2d100 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
2d110 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2d120 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
2d130 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2d140 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2d150 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
2d160 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
2d170 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2d180 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a   fkctr[P1]+=P2.*
2d190 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
2d1a0 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
2d1b0 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
2d1c0 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
2d1d0 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
2d1e0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
2d1f0 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
2d200 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
2d210 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2d220 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
2d230 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2d240 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
2d250 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
2d260 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
2d270 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
2d280 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
2d290 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
2d2a0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
2d2b0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
2d2c0 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
2d2d0 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
2d2e0 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
2d2f0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
2d300 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
2d310 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
2d320 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
2d330 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
2d340 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2d350 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
2d360 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
2d370 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
2d380 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2d390 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
2d3a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2d3b0 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31  sis: if fkctr[P1
2d3c0 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]==0 goto P2.**.
2d3d0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
2d3e0 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
2d3f0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2d400 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
2d410 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
2d420 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
2d430 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
2d440 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
2d450 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2d460 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
2d470 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
2d480 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2d490 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2d4a0 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
2d4b0 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
2d4c0 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
2d4d0 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
2d4e0 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
2d4f0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
2d500 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
2d510 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
2d520 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
2d530 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
2d540 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
2d550 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
2d560 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2d570 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
2d580 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
2d590 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
2d5a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2d5b0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
2d5c0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
2d5d0 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66  chTaken(db->nDef
2d5e0 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
2d5f0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2d600 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
2d610 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72   if( db->nDeferr
2d620 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
2d630 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2d640 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d  s==0 ) pc = pOp-
2d650 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
2d660 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2d670 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72  ken(p->nFkConstr
2d680 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  aint==0 && db->n
2d690 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
2d6a0 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
2d6b0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2d6c0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2d6d0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
2d6e0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
2d6f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d700 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
2d710 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2d720 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
2d730 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d740 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
2d750 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
2d760 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2d770 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
2d780 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
2d790 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
2d7a0 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
2d7b0 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
2d7c0 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
2d7d0 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
2d7e0 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
2d7f0 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
2d800 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2d810 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
2d820 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
2d830 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
2d840 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
2d850 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
2d860 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
2d870 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
2d880 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
2d890 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2d8a0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2d8b0 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
2d8c0 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
2d8d0 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
2d8e0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
2d8f0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2d900 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
2d910 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2d920 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2d930 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
2d940 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
2d950 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
2d960 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
2d970 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
2d980 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
2d990 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
2d9a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2d9b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
2d9c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2d9d0 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
2d9e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
2d9f0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
2da00 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2da10 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
2da20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2da30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2da40 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
2da50 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2da60 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
2da70 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
2da80 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
2da90 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
2daa0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
2dab0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
2dac0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
2dad0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2dae0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2daf0 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  1]>0 goto P2.**.
2db00 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
2db10 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
2db20 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
2db30 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
2db40 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20  * It is illegal 
2db50 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73 74  to use this inst
2db60 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67  ruction on a reg
2db70 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a  ister that does.
2db80 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ** not contain a
2db90 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61  n integer.  An a
2dba0 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77  ssertion fault w
2dbb0 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f  ill result if yo
2dbc0 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  u try..*/.case O
2dbd0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
2dbe0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
2dbf0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2dc00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2dc10 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2dc20 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
2dc30 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
2dc40 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
2dc50 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
2dc60 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2dc70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2dc80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2dc90 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50 31 20  pcode: IfNeg P1 
2dca0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2dcb0 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50 33  opsis: r[P1]+=P3
2dcc0 2c 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74  , if r[P1]<0 got
2dcd0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2dce0 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2dcf0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2dd00 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20   Add literal P3 
2dd10 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 0a  to the value in.
2dd20 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
2dd30 68 65 6e 20 69 66 20 74 68 65 20 76 61 6c 75 65  hen if the value
2dd40 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2dd50 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a 65 72  is less than zer
2dd60 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  o, jump to P2. .
2dd70 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 65 67  */.case OP_IfNeg
2dd80 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2dd90 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2dda0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2ddb0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2ddc0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2ddd0 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
2dde0 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 56   += pOp->p3;.  V
2ddf0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2de00 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
2de10 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
2de20 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2de30 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2de40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2de50 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31  pcode: IfZero P1
2de60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2de70 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50  nopsis: r[P1]+=P
2de80 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67  3, if r[P1]==0 g
2de90 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  oto P2.**.** The
2dea0 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
2deb0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2dec0 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2ded0 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20  al P3 to the.** 
2dee0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2def0 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65  r P1.  If the re
2df00 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20  sult is exactly 
2df10 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
2df20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 5a 65 72  */.case OP_IfZer
2df30 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  o: {        /* j
2df40 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2df50 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2df60 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2df70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2df80 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
2df90 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i += pOp->p3;.  
2dfa0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2dfb0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29  pIn1->u.i==0, 2)
2dfc0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2dfd0 69 3d 3d 30 20 29 7b 0a 20 20 20 20 20 70 63 20  i==0 ){.     pc 
2dfe0 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
2dff0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2e000 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
2e010 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  p * P2 P3 P4 P5.
2e020 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
2e030 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
2e040 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
2e050 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
2e060 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2e070 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
2e080 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
2e090 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
2e0a0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2e0b0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
2e0c0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
2e0d0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
2e0e0 6e 63 74 69 6f 6e 2e 20 20 55 73 65 20 72 65 67  nction.  Use reg
2e0f0 69 73 74 65 72 0a 2a 2a 20 50 33 20 61 73 20 74  ister.** P3 as t
2e100 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
2e110 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
2e120 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
2e130 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
2e140 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
2e150 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 63 61 73 65  cessors..*/.case
2e160 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20   OP_AggStep: {. 
2e170 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
2e180 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
2e190 4d 65 6d 20 2a 70 52 65 63 3b 0a 20 20 73 71 6c  Mem *pRec;.  sql
2e1a0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78  ite3_context ctx
2e1b0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
2e1c0 65 20 2a 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20  e **apVal;..  n 
2e1d0 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
2e1e0 65 72 74 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70  ert( n>=0 );.  p
2e1f0 52 65 63 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Rec = &aMem[pOp-
2e200 3e 70 32 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20  >p2];.  apVal = 
2e210 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73 65  p->apArg;.  asse
2e220 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d  rt( apVal || n==
2e230 30 20 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  0 );.  for(i=0; 
2e240 69 3c 6e 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b  i<n; i++, pRec++
2e250 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
2e260 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
2e270 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20  );.    apVal[i] 
2e280 3d 20 70 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41  = pRec;.    memA
2e290 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
2e2a0 70 52 65 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78  pRec);.  }.  ctx
2e2b0 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  .pFunc = pOp->p4
2e2c0 2e 70 46 75 6e 63 3b 0a 20 20 61 73 73 65 72 74  .pFunc;.  assert
2e2d0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2e2e0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2e2f0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2e300 20 20 63 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65    ctx.pMem = pMe
2e310 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2e320 33 5d 3b 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  3];.  pMem->n++;
2e330 0a 20 20 63 74 78 2e 73 2e 66 6c 61 67 73 20 3d  .  ctx.s.flags =
2e340 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 63 74 78   MEM_Null;.  ctx
2e350 2e 73 2e 7a 20 3d 20 30 3b 0a 20 20 63 74 78 2e  .s.z = 0;.  ctx.
2e360 73 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  s.zMalloc = 0;. 
2e370 20 63 74 78 2e 73 2e 78 44 65 6c 20 3d 20 30 3b   ctx.s.xDel = 0;
2e380 0a 20 20 63 74 78 2e 73 2e 64 62 20 3d 20 64 62  .  ctx.s.db = db
2e390 3b 0a 20 20 63 74 78 2e 69 73 45 72 72 6f 72 20  ;.  ctx.isError 
2e3a0 3d 20 30 3b 0a 20 20 63 74 78 2e 70 43 6f 6c 6c  = 0;.  ctx.pColl
2e3b0 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 6b 69 70   = 0;.  ctx.skip
2e3c0 46 6c 61 67 20 3d 20 30 3b 0a 20 20 69 66 28 20  Flag = 0;.  if( 
2e3d0 63 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46  ctx.pFunc->funcF
2e3e0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
2e3f0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
2e400 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 70     assert( pOp>p
2e410 2d 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73  ->aOp );.    ass
2e420 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
2e430 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
2e440 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2e450 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
2e460 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
2e470 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70   ctx.pColl = pOp
2e480 5b 2d 31 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20  [-1].p4.pColl;. 
2e490 20 7d 0a 20 20 28 63 74 78 2e 70 46 75 6e 63 2d   }.  (ctx.pFunc-
2e4a0 3e 78 53 74 65 70 29 28 26 63 74 78 2c 20 6e 2c  >xStep)(&ctx, n,
2e4b0 20 61 70 56 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a   apVal); /* IMP:
2e4c0 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
2e4d0 2f 0a 20 20 69 66 28 20 63 74 78 2e 69 73 45 72  /.  if( ctx.isEr
2e4e0 72 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ror ){.    sqlit
2e4f0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
2e500 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
2e510 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
2e520 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b 0a  _text(&ctx.s));.
2e530 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45      rc = ctx.isE
2e540 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rror;.  }.  if( 
2e550 63 74 78 2e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  ctx.skipFlag ){.
2e560 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
2e570 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
2e580 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20  ollSeq );.    i 
2e590 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20  = pOp[-1].p1;.  
2e5a0 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65    if( i ) sqlite
2e5b0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2e5c0 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20  (&aMem[i], 1);. 
2e5d0 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62   }..  sqlite3Vdb
2e5e0 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 63 74 78  eMemRelease(&ctx
2e5f0 2e 73 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .s);..  break;.}
2e600 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
2e610 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
2e620 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e630 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32  accum=r[P1] N=P2
2e640 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
2e650 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
2e660 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
2e670 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
2e680 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
2e690 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
2e6a0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
2e6b0 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
2e6c0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
2e6d0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
2e6e0 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
2e6f0 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
2e700 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
2e710 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2e720 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
2e730 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
2e740 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
2e750 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
2e760 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
2e770 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
2e780 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
2e790 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
2e7a0 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
2e7b0 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
2e7c0 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
2e7d0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
2e7e0 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
2e7f0 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
2e800 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
2e810 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
2e820 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
2e830 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
2e840 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
2e850 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
2e860 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
2e870 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
2e880 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
2e890 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  );.  pMem = &aMe
2e8a0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2e8b0 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
2e8c0 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c  gs & ~(MEM_Null|
2e8d0 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a  MEM_Agg))==0 );.
2e8e0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2e8f0 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d  beMemFinalize(pM
2e900 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  em, pOp->p4.pFun
2e910 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  c);.  if( rc ){.
2e920 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
2e930 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
2e940 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
2e950 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
2e960 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  Mem));.  }.  sql
2e970 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2e980 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63  coding(pMem, enc
2e990 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
2e9a0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d  _MAX_BLOBSIZE(pM
2e9b0 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  em);.  if( sqlit
2e9c0 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
2e9d0 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74  pMem) ){.    got
2e9e0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
2e9f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
2ea00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2ea10 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68  AL./* Opcode: Ch
2ea20 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50  eckpoint P1 P2 P
2ea30 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
2ea40 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20  kpoint database 
2ea50 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f  P1. This is a no
2ea60 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74  -op if P1 is not
2ea70 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a   currently in.**
2ea80 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d   WAL mode. Param
2ea90 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f  eter P2 is one o
2eaa0 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  f SQLITE_CHECKPO
2eab0 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c  INT_PASSIVE, FUL
2eac0 4c 0a 2a 2a 20 6f 72 20 52 45 53 54 41 52 54 2e  L.** or RESTART.
2ead0 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
2eae0 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
2eaf0 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
2eb00 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
2eb10 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
2eb20 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
2eb30 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2eb40 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
2eb50 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
2eb60 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
2eb70 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
2eb80 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
2eb90 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
2eba0 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
2ebb0 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
2ebc0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
2ebd0 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
2ebe0 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
2ebf0 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
2ec00 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
2ec10 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
2ec20 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
2ec30 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
2ec40 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
2ec50 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
2ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ec70 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
2ec80 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eca0 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
2ecb0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecd0 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
2ece0 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
2ecf0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2ed00 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
2ed10 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
2ed20 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
2ed30 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
2ed40 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
2ed50 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
2ed60 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
2ed70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2ed80 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
2ed90 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
2eda0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
2edb0 45 53 54 41 52 54 0a 20 20 29 3b 0a 20 20 72 63  ESTART.  );.  rc
2edc0 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70   = sqlite3Checkp
2edd0 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31  oint(db, pOp->p1
2ede0 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73  , pOp->p2, &aRes
2edf0 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a  [1], &aRes[2]);.
2ee00 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2ee10 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 72 63 20  _BUSY ){.    rc 
2ee20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
2ee30 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20   aRes[0] = 1;.  
2ee40 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65  }.  for(i=0, pMe
2ee50 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2ee60 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d  3]; i<3; i++, pM
2ee70 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74  em++){.    sqlit
2ee80 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
2ee90 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65  4(pMem, (i64)aRe
2eea0 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20  s[i]);.  }    . 
2eeb0 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e   break;.};  .#en
2eec0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
2eed0 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a  ITE_OMIT_PRAGMA.
2eee0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e  /* Opcode: Journ
2eef0 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20  alMode P1 P2 P3 
2ef00 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65  * *.**.** Change
2ef10 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   the journal mod
2ef20 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
2ef30 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20   to P3. P3 must 
2ef40 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a  be one of the.**
2ef50 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
2ef60 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49  DE_XXX values. I
2ef70 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65  f changing betwe
2ef80 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72  en the various r
2ef90 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73  ollback.** modes
2efa0 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61   (delete, trunca
2efb0 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66  te, persist, off
2efc0 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68   and memory), th
2efd0 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a  is is a simple.*
2efe0 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20  * operation. No 
2eff0 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  IO is required..
2f000 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e  **.** If changin
2f010 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66  g into or out of
2f020 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72   WAL mode the pr
2f030 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20  ocedure is more 
2f040 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a  complicated..**.
2f050 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e  ** Write a strin
2f060 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
2f070 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d   final journal-m
2f080 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20  ode to register 
2f090 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  P2..*/.case OP_J
2f0a0 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20  ournalMode: {   
2f0b0 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
2f0c0 61 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ase */.  Btree *
2f0d0 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pBt;            
2f0e0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65           /* Btre
2f0f0 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72  e to change jour
2f100 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20  nal mode of */. 
2f110 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20   Pager *pPager; 
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f130 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69   /* Pager associ
2f140 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f  ated with pBt */
2f150 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20  .  int eNew;    
2f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f170 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61     /* New journa
2f180 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  l mode */.  int 
2f190 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  eOld;           
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2f1b0 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d  he old journal m
2f1c0 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ode */.#ifndef S
2f1d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2f1e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
2f1f0 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  lename;         
2f200 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
2f210 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50  base file for pP
2f220 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ager */.#endif..
2f230 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
2f240 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
2f250 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f260 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
2f270 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
2f280 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
2f290 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
2f2a0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2f2b0 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
2f2c0 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
2f2d0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f2e0 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
2f2f0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
2f300 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2f310 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
2f320 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f330 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
2f340 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2f350 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
2f360 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
2f370 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2f380 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2f390 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2f3a0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
2f3b0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
2f3c0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
2f3d0 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
2f3e0 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
2f3f0 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
2f400 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
2f410 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
2f420 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2f430 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
2f440 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
2f450 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
2f460 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
2f470 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
2f480 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
2f490 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f4a0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
2f4b0 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
2f4c0 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
2f4d0 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
2f4e0 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
2f4f0 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
2f500 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
2f510 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
2f520 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
2f530 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
2f540 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
2f550 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
2f560 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
2f570 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f580 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
2f590 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
2f5a0 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
2f5b0 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
2f5c0 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
2f5d0 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
2f5e0 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
2f5f0 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
2f600 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
2f610 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
2f620 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
2f630 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
2f640 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
2f650 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2f660 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
2f670 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f680 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
2f690 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
2f6a0 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
2f6b0 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
2f6c0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2f6d0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
2f6e0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2f6f0 72 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20  rMsg, db, .     
2f700 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61       "cannot cha
2f710 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20  nge %s wal mode 
2f720 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
2f730 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
2f740 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47        (eNew==PAG
2f750 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2f760 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f  AL ? "into" : "o
2f770 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b  ut of").      );
2f780 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2f790 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20    }else{. .     
2f7a0 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
2f7b0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2f7c0 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
2f7d0 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f  f leaving WAL mo
2f7e0 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f  de, close the lo
2f7f0 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65  g file. If succe
2f800 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a  ssful, the call.
2f810 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61          ** to Pa
2f820 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68  gerCloseWal() ch
2f830 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65  eckpoints and de
2f840 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d  letes the write-
2f850 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20  ahead-log .     
2f860 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45     ** file. An E
2f870 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61  XCLUSIVE lock ma
2f880 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20  y still be held 
2f890 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
2f8a0 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a  file .        **
2f8b0 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73   after a success
2f8c0 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20  ful return. .   
2f8d0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
2f8e0 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
2f8f0 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72  rCloseWal(pPager
2f900 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
2f910 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2f920 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2f930 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
2f940 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
2f950 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
2f960 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
2f970 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
2f980 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
2f990 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
2f9a0 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
2f9b0 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
2f9c0 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
2f9d0 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
2f9e0 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
2f9f0 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
2fa00 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
2fa10 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2fa20 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
2fa30 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
2fa40 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
2fa50 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
2fa60 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
2fa70 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
2fa80 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
2fa90 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
2faa0 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
2fab0 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
2fac0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
2fad0 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
2fae0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
2faf0 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
2fb00 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
2fb10 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2fb20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
2fb30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
2fb40 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
2fb50 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
2fb60 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
2fb70 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
2fb80 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
2fb90 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
2fba0 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
2fbb0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e  if( rc ){.    eN
2fbc0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20  ew = eOld;.  }. 
2fbd0 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50   eNew = sqlite3P
2fbe0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
2fbf0 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
2fc00 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
2fc10 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
2fc20 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2fc30 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
2fc40 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
2fc50 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  >z = (char *)sql
2fc60 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
2fc70 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75  ame(eNew);.  pOu
2fc80 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  t->n = sqlite3St
2fc90 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b  rlen30(pOut->z);
2fca0 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
2fcb0 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71  QLITE_UTF8;.  sq
2fcc0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2fcd0 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
2fce0 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2fcf0 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.};.#endif /* S
2fd00 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
2fd10 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  A */..#if !defin
2fd20 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
2fd30 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
2fd40 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2fd50 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
2fd60 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a 20 2a  : Vacuum * * * *
2fd70 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
2fd80 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
2fd90 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ase.  This opcod
2fda0 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f 74 68  e will cause oth
2fdb0 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20 6d 61  er virtual.** ma
2fdc0 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63 72 65  chines to be cre
2fdd0 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20 20 49  ated and run.  I
2fde0 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 61 6c  t may not be cal
2fdf0 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 0a  led from within.
2fe00 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** a transaction
2fe10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
2fe20 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  uum: {.  assert(
2fe30 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2fe40 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
2fe50 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
2fe60 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20 20 62  ErrMsg, db);.  b
2fe70 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
2fe80 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2fe90 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2fea0 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  UUM)./* Opcode: 
2feb0 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32  IncrVacuum P1 P2
2fec0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72   * * *.**.** Per
2fed0 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74  form a single st
2fee0 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d  ep of the increm
2fef0 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f  ental vacuum pro
2ff00 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65  cedure on.** the
2ff10 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66   P1 database. If
2ff20 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20   the vacuum has 
2ff30 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74  finished, jump t
2ff40 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  o instruction.**
2ff50 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
2ff60 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2ff70 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2ff80 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2ff90 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20  _IncrVacuum: {  
2ffa0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2ffb0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
2ffc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ffd0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2ffe0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2fff0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
30000 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
30010 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
30020 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
30030 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62  =0 );.  pBt = db
30040 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
30050 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  Bt;.  rc = sqlit
30060 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75  e3BtreeIncrVacuu
30070 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72  m(pBt);.  VdbeBr
30080 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
30090 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20  LITE_DONE,2);.  
300a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
300b0 4f 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ONE ){.    pc = 
300c0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
300d0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
300e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
300f0 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
30100 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a  e: Expire P1 * *
30110 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
30120 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
30130 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72  tements to expir
30140 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69  e.  When an expi
30150 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
30160 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69   is executed usi
30170 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ng sqlite3_step(
30180 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72  ) it will either
30190 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a   automatically.*
301a0 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65  * reprepare itse
301b0 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72  lf (if it was or
301c0 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64  iginally created
301d0 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
301e0 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20  repare_v2()).** 
301f0 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20  or it will fail 
30200 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45  with SQLITE_SCHE
30210 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  MA..** .** If P1
30220 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
30230 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
30240 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
30250 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
30260 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
30270 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
30280 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
30290 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a   is expired..*/.
302a0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
302b0 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31  {.  if( !pOp->p1
302c0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45   ){.    sqlite3E
302d0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
302e0 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d  tements(db);.  }
302f0 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70  else{.    p->exp
30300 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20  ired = 1;.  }.  
30310 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
30320 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
30330 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70  ARED_CACHE./* Op
30340 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20  code: TableLock 
30350 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
30360 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50   Synopsis: iDb=P
30370 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d  1 root=P2 write=
30380 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20  P3.**.** Obtain 
30390 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74  a lock on a part
303a0 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68  icular table. Th
303b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
303c0 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
303d0 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63  .** the shared-c
303e0 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73 20  ache feature is 
303f0 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20  enabled. .**.** 
30400 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
30410 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
30420 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
30430 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
30440 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65  .** on which the
30450 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65   lock is acquire
30460 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69  d.  A readlock i
30470 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33  s obtained if P3
30480 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74  ==0 or.** a writ
30490 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e  e lock if P3==1.
304a0 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69  .**.** P2 contai
304b0 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  ns the root-page
304c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
304d0 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   lock..**.** P4 
304e0 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
304f0 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  er to the name o
30500 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  f the table bein
30510 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69  g locked. This i
30520 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74  s only.** used t
30530 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72  o generate an er
30540 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20 74  ror message if t
30550 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62  he lock cannot b
30560 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63  e obtained..*/.c
30570 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b  ase OP_TableLock
30580 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65  : {.  u8 isWrite
30590 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e  Lock = (u8)pOp->
305a0 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74  p3;.  if( isWrit
305b0 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d  eLock || 0==(db-
305c0 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65  >flags&SQLITE_Re
305d0 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29  adUncommitted) )
305e0 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70  {.    int p1 = p
305f0 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73  Op->p1; .    ass
30600 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31  ert( p1>=0 && p1
30610 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20  <db->nDb );.    
30620 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
30630 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
30640 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65   p1) );.    asse
30650 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d  rt( isWriteLock=
30660 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63  =0 || isWriteLoc
30670 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d  k==1 );.    rc =
30680 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63   sqlite3BtreeLoc
30690 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70  kTable(db->aDb[p
306a0 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c  1].pBt, pOp->p2,
306b0 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20   isWriteLock);. 
306c0 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29     if( (rc&0xFF)
306d0 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20  ==SQLITE_LOCKED 
306e0 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
306f0 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
30700 2e 7a 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  .z;.      sqlite
30710 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
30720 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 64 61 74  ErrMsg, db, "dat
30730 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
30740 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
30750 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
30760 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30770 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
30780 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
30790 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
307a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
307b0 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
307c0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
307d0 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
307e0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
307f0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
30800 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
30810 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
30820 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
30830 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
30840 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
30850 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
30860 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
30870 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
30880 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
30890 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
308a0 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
308b0 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
308c0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
308d0 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
308e0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
308f0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
30900 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
30910 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
30920 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
30930 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
30940 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
30950 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
30960 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
30970 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
30980 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
30990 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
309a0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
309b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
309c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
309d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
309e0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
309f0 72 65 61 74 65 20 50 31 20 2a 20 2a 20 50 34 20  reate P1 * * P4 
30a00 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
30a10 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
30a20 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
30a30 61 62 61 73 65 20 50 31 2e 20 43 61 6c 6c 20 74  abase P1. Call t
30a40 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  he xCreate metho
30a50 64 0a 2a 2a 20 66 6f 72 20 74 68 61 74 20 74 61  d.** for that ta
30a60 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
30a70 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 72 63 20  VCreate: {.  rc 
30a80 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
30a90 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d  lCreate(db, pOp-
30aa0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  >p1, pOp->p4.z, 
30ab0 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20  &p->zErrMsg);.  
30ac0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30ad0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
30ae0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
30af0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30b00 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
30b10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
30b20 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
30b30 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
30b40 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
30b50 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
30b60 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
30b70 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
30b80 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
30b90 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
30ba0 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 70 2d  VDestroy: {.  p-
30bb0 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
30bc0 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  2;.  rc = sqlite
30bd0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
30be0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
30bf0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 70 2d 3e 69  p->p4.z);.  p->i
30c00 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b  nVtabMethod = 0;
30c10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
30c20 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
30c30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
30c40 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
30c50 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
30c60 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
30c70 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
30c80 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
30c90 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
30ca0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
30cb0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
30cc0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
30cd0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
30ce0 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
30cf0 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
30d00 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
30d10 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
30d20 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
30d30 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
30d40 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
30d50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
30d60 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
30d70 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75 72  cursor *pVtabCur
30d80 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  sor;.  sqlite3_v
30d90 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71  tab *pVtab;.  sq
30da0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
30db0 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
30dc0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
30dd0 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ;.  pCur = 0;.  
30de0 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 30 3b  pVtabCursor = 0;
30df0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
30e00 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
30e10 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71  .  pModule = (sq
30e20 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70  lite3_module *)p
30e30 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
30e40 20 61 73 73 65 72 74 28 70 56 74 61 62 20 26 26   assert(pVtab &&
30e50 20 70 4d 6f 64 75 6c 65 29 3b 0a 20 20 72 63 20   pModule);.  rc 
30e60 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e  = pModule->xOpen
30e70 28 70 56 74 61 62 2c 20 26 70 56 74 61 62 43 75  (pVtab, &pVtabCu
30e80 72 73 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  rsor);.  sqlite3
30e90 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
30ea0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
30eb0 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20  ( SQLITE_OK==rc 
30ec0 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ){.    /* Initia
30ed0 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61  lize sqlite3_vta
30ee0 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c  b_cursor base cl
30ef0 61 73 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62  ass */.    pVtab
30f00 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20  Cursor->pVtab = 
30f10 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49  pVtab;..    /* I
30f20 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63  nitialize vdbe c
30f30 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a  ursor object */.
30f40 20 20 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63      pCur = alloc
30f50 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
30f60 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b  ->p1, 0, -1, 0);
30f70 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
30f80 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74  .      pCur->pVt
30f90 61 62 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62  abCursor = pVtab
30fa0 43 75 72 73 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  Cursor;.    }els
30fb0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  e{.      db->mal
30fc0 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
30fd0 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
30fe0 6c 6f 73 65 28 70 56 74 61 62 43 75 72 73 6f 72  lose(pVtabCursor
30ff0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
31000 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
31010 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
31020 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
31030 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31040 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
31050 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
31060 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
31070 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70  .** Synopsis: ip
31080 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d  lan=r[P3] zplan=
31090 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  'P4'.**.** P1 is
310a0 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
310b0 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
310c0 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
310d0 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
310e0 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
310f0 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
31100 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
31110 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
31120 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
31130 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
31140 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
31150 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
31160 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
31170 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
31180 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
31190 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
311a0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
311b0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
311c0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
311d0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
311e0 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
311f0 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
31200 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
31210 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
31220 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
31230 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
31240 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
31250 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
31260 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
31270 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
31280 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
31290 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
312a0 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
312b0 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
312c0 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
312d0 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
312e0 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
312f0 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
31300 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
31310 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
31320 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
31330 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
31340 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
31350 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
31360 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
31370 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
31380 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
31390 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
313a0 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
313b0 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
313c0 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
313d0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
313e0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
313f0 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20   *pQuery;.  Mem 
31400 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65  *pArgc;.  sqlite
31410 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
31420 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71  VtabCursor;.  sq
31430 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
31440 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  b;.  VdbeCursor 
31450 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73  *pCur;.  int res
31460 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  ;.  int i;.  Mem
31470 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75   **apArg;..  pQu
31480 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ery = &aMem[pOp-
31490 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20  >p3];.  pArgc = 
314a0 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43  &pQuery[1];.  pC
314b0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
314c0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
314d0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75  ( memIsValid(pQu
314e0 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54  ery) );.  REGIST
314f0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
31500 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73  , pQuery);.  ass
31510 65 72 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62  ert( pCur->pVtab
31520 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 56 74 61  Cursor );.  pVta
31530 62 43 75 72 73 6f 72 20 3d 20 70 43 75 72 2d 3e  bCursor = pCur->
31540 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 70  pVtabCursor;.  p
31550 56 74 61 62 20 3d 20 70 56 74 61 62 43 75 72 73  Vtab = pVtabCurs
31560 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  or->pVtab;.  pMo
31570 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
31580 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61  odule;..  /* Gra
31590 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62  b the index numb
315a0 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72 61  er and argc para
315b0 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65  meters */.  asse
315c0 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61  rt( (pQuery->fla
315d0 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26  gs&MEM_Int)!=0 &
315e0 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d  & pArgc->flags==
315f0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72  MEM_Int );.  nAr
31600 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e  g = (int)pArgc->
31610 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20  u.i;.  iQuery = 
31620 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69  (int)pQuery->u.i
31630 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
31640 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  he xFilter metho
31650 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 72 65 73  d */.  {.    res
31660 20 3d 20 30 3b 0a 20 20 20 20 61 70 41 72 67 20   = 0;.    apArg 
31670 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
31680 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72  for(i = 0; i<nAr
31690 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  g; i++){.      a
316a0 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63  pArg[i] = &pArgc
316b0 5b 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20  [i+1];.    }..  
316c0 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f    p->inVtabMetho
316d0 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20  d = 1;.    rc = 
316e0 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72  pModule->xFilter
316f0 28 70 56 74 61 62 43 75 72 73 6f 72 2c 20 69 51  (pVtabCursor, iQ
31700 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  uery, pOp->p4.z,
31710 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20   nArg, apArg);. 
31720 20 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68     p->inVtabMeth
31730 6f 64 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  od = 0;.    sqli
31740 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
31750 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
31760 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
31770 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
31780 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
31790 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  f(pVtabCursor);.
317a0 20 20 20 20 7d 0a 20 20 20 20 56 64 62 65 42 72      }.    VdbeBr
317b0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
317c0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  ,2);.    if( res
317d0 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70   ){.      pc = p
317e0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
317f0 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75  }.  }.  pCur->nu
31800 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62 72  llRow = 0;..  br
31810 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
31820 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31830 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
31840 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31850 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
31860 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
31870 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
31880 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
31890 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a  ]=vcolumn(P2).**
318a0 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
318b0 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
318c0 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
318d0 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
318e0 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
318f0 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
31900 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
31910 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
31920 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
31930 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
31940 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
31950 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
31960 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
31970 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
31980 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
31990 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
319a0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
319b0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
319c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
319d0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
319e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
319f0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
31a00 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
31a10 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
31a20 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
31a30 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
31a40 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
31a50 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
31a60 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
31a70 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
31a80 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
31a90 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
31aa0 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  ab = pCur->pVtab
31ab0 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20  Cursor->pVtab;. 
31ac0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
31ad0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
31ae0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
31af0 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
31b00 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
31b10 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
31b20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74  );..  /* The out
31b30 70 75 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72  put cell may alr
31b40 65 61 64 79 20 68 61 76 65 20 61 20 62 75 66 66  eady have a buff
31b50 65 72 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f  er allocated. Mo
31b60 76 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 72  ve.  ** the curr
31b70 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 74 6f 20  ent contents to 
31b80 73 43 6f 6e 74 65 78 74 2e 73 20 73 6f 20 69 6e  sContext.s so in
31b90 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
31ba0 75 6e 63 74 69 6f 6e 20 0a 20 20 2a 2a 20 63 61  unction .  ** ca
31bb0 6e 20 75 73 65 20 74 68 65 20 61 6c 72 65 61 64  n use the alread
31bc0 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66  y allocated buff
31bd0 65 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c  er instead of al
31be0 6c 6f 63 61 74 69 6e 67 20 61 20 0a 20 20 2a 2a  locating a .  **
31bf0 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a 2f 0a 20   new one..  */. 
31c00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
31c10 6f 76 65 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c  ove(&sContext.s,
31c20 20 70 44 65 73 74 29 3b 0a 20 20 4d 65 6d 53 65   pDest);.  MemSe
31c30 74 54 79 70 65 46 6c 61 67 28 26 73 43 6f 6e 74  tTypeFlag(&sCont
31c40 65 78 74 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ext.s, MEM_Null)
31c50 3b 0a 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  ;..  rc = pModul
31c60 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d  e->xColumn(pCur-
31c70 3e 70 56 74 61 62 43 75 72 73 6f 72 2c 20 26 73  >pVtabCursor, &s
31c80 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
31c90 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
31ca0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
31cb0 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
31cc0 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
31cd0 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
31ce0 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
31cf0 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
31d00 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
31d10 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 50 33  nction to the P3
31d20 20 72 65 67 69 73 74 65 72 2e 20 57 65 0a 20 20   register. We.  
31d30 2a 2a 20 64 6f 20 74 68 69 73 20 72 65 67 61 72  ** do this regar
31d40 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
31d50 20 6f 72 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72   or not an error
31d60 20 6f 63 63 75 72 72 65 64 20 74 6f 20 65 6e 73   occurred to ens
31d70 75 72 65 20 61 6e 79 0a 20 20 2a 2a 20 64 79 6e  ure any.  ** dyn
31d80 61 6d 69 63 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  amic allocation 
31d90 69 6e 20 73 43 6f 6e 74 65 78 74 2e 73 20 28 61  in sContext.s (a
31da0 20 4d 65 6d 20 73 74 72 75 63 74 29 20 69 73 20   Mem struct) is 
31db0 20 72 65 6c 65 61 73 65 64 2e 0a 20 20 2a 2f 0a   released..  */.
31dc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
31dd0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 26 73 43 6f  ngeEncoding(&sCo
31de0 6e 74 65 78 74 2e 73 2c 20 65 6e 63 6f 64 69 6e  ntext.s, encodin
31df0 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  g);.  sqlite3Vdb
31e00 65 4d 65 6d 4d 6f 76 65 28 70 44 65 73 74 2c 20  eMemMove(pDest, 
31e10 26 73 43 6f 6e 74 65 78 74 2e 73 29 3b 0a 20 20  &sContext.s);.  
31e20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
31e30 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
31e40 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
31e50 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20  BSIZE(pDest);.. 
31e60 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
31e70 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
31e80 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
31e90 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
31ea0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31eb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31ec0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
31ed0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31ee0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
31ef0 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31  Opcode: VNext P1
31f00 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
31f10 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20  Advance virtual 
31f20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20  table P1 to the 
31f30 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20  next row in its 
31f40 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a  result set and.*
31f50 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  * jump to instru
31f60 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69  ction P2.  Or, i
31f70 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
31f80 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64 0a  ble has reached.
31f90 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74  ** the end of it
31fa0 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68  s result set, th
31fb0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
31fc0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
31fd0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
31fe0 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f   OP_VNext: {   /
31ff0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69  * jump */.  sqli
32000 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
32010 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
32020 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
32030 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56  ;.  int res;.  V
32040 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
32050 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ..  res = 0;.  p
32060 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
32070 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
32080 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
32090 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43  rsor );.  if( pC
320a0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
320b0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
320c0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56  pVtab = pCur->pV
320d0 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62  tabCursor->pVtab
320e0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
320f0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
32100 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
32110 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
32120 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
32130 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
32140 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
32150 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
32160 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
32170 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
32180 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
32190 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
321a0 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
321b0 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
321c0 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
321d0 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
321e0 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
321f0 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
32200 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
32210 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
32220 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
32230 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
32240 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
32250 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
32260 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
32270 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
32280 72 2e 0a 20 20 2a 2f 0a 20 20 70 2d 3e 69 6e 56  r..  */.  p->inV
32290 74 61 62 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20  tabMethod = 1;. 
322a0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
322b0 4e 65 78 74 28 70 43 75 72 2d 3e 70 56 74 61 62  Next(pCur->pVtab
322c0 43 75 72 73 6f 72 29 3b 0a 20 20 70 2d 3e 69 6e  Cursor);.  p->in
322d0 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a  VtabMethod = 0;.
322e0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
322f0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
32300 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ab);.  if( rc==S
32310 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
32320 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
32330 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43  Eof(pCur->pVtabC
32340 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64  ursor);.  }.  Vd
32350 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72  beBranchTaken(!r
32360 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65  es,2);.  if( !re
32370 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  s ){.    /* If t
32380 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75  here is data, ju
32390 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
323a0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
323b0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
323c0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
323d0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
323e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
323f0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
32400 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
32410 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
32420 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
32430 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
32440 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
32450 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
32460 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
32470 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
32480 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
32490 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
324a0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
324b0 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
324c0 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
324d0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
324e0 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
324f0 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
32500 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
32510 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
32520 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
32530 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
32540 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20    Mem *pName;.. 
32550 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
32560 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
32570 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70   pName = &aMem[p
32580 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
32590 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
325a0 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
325b0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
325c0 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61  id(pName) );.  a
325d0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
325e0 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53  ly==0 );.  REGIS
325f0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
32600 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
32610 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
32620 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
32630 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
32640 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
32650 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  F8 );.  testcase
32660 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
32670 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
32680 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
32690 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
326a0 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d  TF16LE );.  rc =
326b0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
326c0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65  geEncoding(pName
326d0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
326e0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
326f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
32700 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
32710 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70  xRename(pVtab, p
32720 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71  Name->z);.    sq
32730 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
32740 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
32750 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
32760 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
32770 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
32780 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32790 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
327a0 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
327b0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
327c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61  * Synopsis: data
327d0 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P2].**.** 
327e0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
327f0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
32800 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
32810 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
32820 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
32830 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
32840 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
32850 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
32860 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
32870 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
32880 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
32890 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
328a0 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
328b0 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
328c0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
328d0 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
328e0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
328f0 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
32900 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
32910 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
32920 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
32930 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
32940 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
32950 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
32960 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
32970 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
32980 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
32990 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
329a0 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
329b0 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
329c0 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
329d0 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
329e0 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
329f0 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
32a00 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
32a10 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
32a20 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
32a30 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
32a40 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
32a50 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
32a60 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
32a70 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
32a80 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
32a90 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
32aa0 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
32ab0 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
32ac0 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
32ad0 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
32ae0 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
32af0 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
32b00 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
32b10 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
32b20 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
32b30 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
32b40 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
32b50 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
32b60 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
32b70 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
32b80 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
32b90 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
32ba0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
32bb0 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
32bc0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
32bd0 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
32be0 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
32bf0 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a  t inserted..**.*
32c00 2a 20 50 35 20 69 73 20 74 68 65 20 65 72 72 6f  * P5 is the erro
32c10 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65  r actions (OE_Re
32c20 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20  place, OE_Fail, 
32c30 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20  OE_Ignore, etc) 
32c40 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74  to.** apply in t
32c50 68 65 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e  he case of a con
32c60 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20  straint failure 
32c70 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20  on an insert or 
32c80 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
32c90 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
32ca0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
32cb0 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  tab;.  sqlite3_m
32cc0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
32cd0 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
32ce0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e  t i;.  sqlite_in
32cf0 74 36 34 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d  t64 rowid;.  Mem
32d00 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20   **apArg;.  Mem 
32d10 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pX;..  assert( 
32d20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20  pOp->p2==1      
32d30 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
32d40 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e  _Fail   || pOp->
32d50 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20  p5==OE_Rollback 
32d60 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
32d70 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20  p5==OE_Abort || 
32d80 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p5==OE_Igno
32d90 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  re || pOp->p5==O
32da0 45 5f 52 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20  E_Replace.  );. 
32db0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
32dc0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74  Only==0 );.  pVt
32dd0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
32de0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ab->pVtab;.  pMo
32df0 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33 5f  dule = (sqlite3_
32e00 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d 3e  module *)pVtab->
32e10 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
32e20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
32e30 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
32e40 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
32e50 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c  f( ALWAYS(pModul
32e60 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20  e->xUpdate) ){. 
32e70 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66     u8 vtabOnConf
32e80 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f  lict = db->vtabO
32e90 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61  nConflict;.    a
32ea0 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
32eb0 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b  .    pX = &aMem[
32ec0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
32ed0 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
32ee0 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
32ef0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58  t( memIsValid(pX
32f00 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
32f10 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
32f20 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
32f30 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
32f40 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  X++;.    }.    d
32f50 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
32f60 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20  t = pOp->p5;.   
32f70 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
32f80 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
32f90 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
32fa0 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62  d);.    db->vtab
32fb0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61  OnConflict = vta
32fc0 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
32fd0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
32fe0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
32ff0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
33000 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
33010 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
33020 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
33030 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
33040 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
33050 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
33060 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
33070 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f 77 69  lastRowid = rowi
33080 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  d;.    }.    if(
33090 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
330a0 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 26 26  TE_CONSTRAINT &&
330b0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
330c0 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20  bConstraint ){. 
330d0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
330e0 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
330f0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
33100 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c  TE_OK;.      }el
33110 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 65  se{.        p->e
33120 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 28 70  rrorAction = ((p
33130 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
33140 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a  ce) ? OE_Abort :
33150 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20   pOp->p5);.     
33160 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
33170 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
33180 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
33190 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
331a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
331b0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
331c0 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
331d0 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
331e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65  ./* Opcode: Page
331f0 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  count P1 P2 * * 
33200 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
33210 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  e current number
33220 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74   of pages in dat
33230 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f  abase P1 to memo
33240 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63  ry cell P2..*/.c
33250 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  ase OP_Pagecount
33260 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
33270 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
33280 65 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  e */.  pOut->u.i
33290 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
332a0 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
332b0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
332c0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
332d0 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
332e0 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
332f0 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
33300 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
33310 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
33320 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
33330 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
33340 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database P1 t
33350 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50  o the value in P
33360 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74  3..** Do not let
33370 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
33380 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c  e count fall bel
33390 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ow the current p
333a0 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a  age count and.**
333b0 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74   do not change t
333c0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
333d0 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50  count value if P
333e0 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  3==0..**.** Stor
333f0 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
33400 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74  ge count after t
33410 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67  he change in reg
33420 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
33430 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b  e OP_MaxPgcnt: {
33440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
33450 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
33460 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
33470 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65   newMax;.  Btree
33480 20 2a 70 42 74 3b 0a 0a 20 20 70 42 74 20 3d 20   *pBt;..  pBt = 
33490 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
334a0 2e 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d  .pBt;.  newMax =
334b0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   0;.  if( pOp->p
334c0 33 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20  3 ){.    newMax 
334d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
334e0 73 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20  stPage(pBt);.   
334f0 20 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75   if( newMax < (u
33500 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20  nsigned)pOp->p3 
33510 29 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69  ) newMax = (unsi
33520 67 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  gned)pOp->p3;.  
33530 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
33540 73 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50  sqlite3BtreeMaxP
33550 61 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65  ageCount(pBt, ne
33560 77 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  wMax);.  break;.
33570 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70  }.#endif.../* Op
33580 63 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50 32 20  code: Init * P2 
33590 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
335a0 69 73 3a 20 20 53 74 61 72 74 20 61 74 20 50 32  is:  Start at P2
335b0 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20  .**.** Programs 
335c0 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65  contain a single
335d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
335e0 73 20 6f 70 63 6f 64 65 20 61 73 20 74 68 65 20  s opcode as the 
335f0 76 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70  very first.** op
33600 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  code..**.** If t
33610 72 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  racing is enable
33620 64 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65  d (by the sqlite
33630 33 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72  3_trace()) inter
33640 66 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  face, then.** th
33650 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63  e UTF-8 string c
33660 6f 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69  ontained in P4 i
33670 73 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65  s emitted on the
33680 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e   trace callback.
33690 0a 2a 2a 20 4f 72 20 69 66 20 50 34 20 69 73 20  .** Or if P4 is 
336a0 62 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65 20 73  blank, use the s
336b0 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
336c0 79 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e  y sqlite3_sql().
336d0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  .**.** If P2 is 
336e0 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  not zero, jump t
336f0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
33700 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69  ..*/.case OP_Ini
33710 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  t: {          /*
33720 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20   jump */.  char 
33730 2a 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20  *zTrace;.  char 
33740 2a 7a 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  *z;..  if( pOp->
33750 70 32 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  p2 ){.    pc = p
33760 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
33770 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
33780 4d 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20  MIT_TRACE.  if( 
33790 64 62 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26  db->xTrace.   &&
337a0 20 21 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a   !p->doingRerun.
337b0 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
337c0 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
337d0 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
337e0 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a  ))!=0.  ){.    z
337f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 45 78   = sqlite3VdbeEx
33800 70 61 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63  pandSql(p, zTrac
33810 65 29 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61  e);.    db->xTra
33820 63 65 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67  ce(db->pTraceArg
33830 2c 20 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , z);.    sqlite
33840 33 44 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a  3DbFree(db, z);.
33850 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
33860 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
33870 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f  E.  zTrace = (pO
33880 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70  p->p4.z ? pOp->p
33890 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a  4.z : p->zSql);.
338a0 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a    if( zTrace ){.
338b0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
338c0 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
338d0 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
338e0 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  f( DbMaskTest(p-
338f0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d  >btreeMask, i)==
33900 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
33910 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65      sqlite3_file
33920 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d  _control(db, db-
33930 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53  >aDb[i].zName, S
33940 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43  QLITE_FCNTL_TRAC
33950 45 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20  E, zTrace);.    
33960 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
33970 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
33980 5f 54 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66  _TRACE */.#ifdef
33990 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
339a0 69 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  if( (db->flags &
339b0 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
339c0 29 21 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61  )!=0.   && (zTra
339d0 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
339e0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
339f0 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
33a00 20 20 20 20 73 71 6c 69 74 65 33 44 65 62 75 67      sqlite3Debug
33a10 50 72 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63  Printf("SQL-trac
33a20 65 3a 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65  e: %s\n", zTrace
33a30 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
33a40 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
33a50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
33a60 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a  E_OMIT_TRACE */.
33a70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
33a80 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a  Opcode: Noop * *
33a90 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20   * * *.**.** Do 
33aa0 6e 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69  nothing.  This i
33ab0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66  nstruction is of
33ac0 74 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20  ten useful as a 
33ad0 6a 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74  jump.** destinat
33ae0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68  ion..*/./*.** Th
33af0 65 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20  e magic Explain 
33b00 6f 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20  opcode are only 
33b10 69 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78  inserted when ex
33b20 70 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a  plain==2 (which.
33b30 2a 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65  ** is to say whe
33b40 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55  n the EXPLAIN QU
33b50 45 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20  ERY PLAN syntax 
33b60 69 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69  is used.).** Thi
33b70 73 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73  s opcode records
33b80 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
33b90 6d 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e  m the optimizer.
33ba0 20 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74    It is the.** t
33bb0 68 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d  he same as a no-
33bc0 6f 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  op.  This opcode
33bd0 73 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69  snever appears i
33be0 6e 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67  n a real VM prog
33bf0 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a  ram..*/.default:
33c00 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54   {          /* T
33c10 68 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50  his is really OP
33c20 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70  _Noop and OP_Exp
33c30 6c 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  lain */.  assert
33c40 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
33c50 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f  P_Noop || pOp->o
33c60 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
33c70 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
33c80 0a 2f 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 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
33cd0 2a 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20  ** The cases of 
33ce0 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65  the switch state
33cf0 6d 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20  ment above this 
33d00 6c 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20  line should all 
33d10 62 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62  be indented.** b
33d20 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
33d30 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36   the left-most 6
33d40 20 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65   spaces have bee
33d50 6e 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70  n removed to imp
33d60 72 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64  rove the.** read
33d70 61 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74  ability.  From t
33d80 68 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77  his point on dow
33d90 6e 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e  n, the normal in
33da0 64 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20  dentation rules 
33db0 61 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e  are.** restored.
33dc0 0a 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 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
33e10 20 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44      }..#ifdef VD
33e20 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b  BE_PROFILE.    {
33e30 0a 20 20 20 20 20 20 75 36 34 20 65 6e 64 54 69  .      u64 endTi
33e40 6d 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69  me = sqlite3Hwti
33e50 6d 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20  me();.      if( 
33e60 65 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20  endTime>start ) 
33e70 70 4f 70 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65  pOp->cycles += e
33e80 6e 64 54 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a  ndTime - start;.
33e90 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b        pOp->cnt++
33ea0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ;.    }.#endif..
33eb0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
33ec0 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
33ed0 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
33ee0 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
33ef0 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
33f00 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
33f10 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
33f20 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
33f30 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
33f40 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
33f50 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
33f60 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
33f70 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
33f80 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
33f90 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
33fa0 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
33fb0 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
33fc0 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
33fd0 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
33fe0 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
33ff0 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
34000 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
34010 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
34020 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
34030 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
34040 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 70 72    if( rc!=0 ) pr
34050 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72  intf("rc=%d\n",r
34060 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  c);.      if( pO
34070 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50  p->opflags & (OP
34080 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
34090 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20  ASE|OPFLG_OUT2) 
340a0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
340b0 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 32  terTrace(pOp->p2
340c0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
340d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
340e0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
340f0 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
34100 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
34110 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c  erTrace(pOp->p3,
34120 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
34130 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
34140 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54  #endif  /* SQLIT
34150 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69  E_DEBUG */.#endi
34160 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a  f  /* NDEBUG */.
34170 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20    }  /* The end 
34180 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c  of the for(;;) l
34190 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68  oop the loops th
341a0 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f  rough opcodes */
341b0 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61  ..  /* If we rea
341c0 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69  ch this point, i
341d0 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65  t means that exe
341e0 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68  cution is finish
341f0 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20  ed with.  ** an 
34200 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69  error of some ki
34210 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72  nd..  */.vdbe_er
34220 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65  ror_halt:.  asse
34230 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72  rt( rc );.  p->r
34240 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61  c = rc;.  testca
34250 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
34260 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
34270 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  );.  sqlite3_log
34280 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20  (rc, "statement 
34290 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25  aborts at %d: [%
342a0 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20  s] %s", .       
342b0 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c 20              pc, 
342c0 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
342d0 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Msg);.  sqlite3V
342e0 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
342f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
34300 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
34310 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
34320 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
34330 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65  RROR;.  if( rese
34340 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30  tSchemaOnFault>0
34350 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
34360 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
34370 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  , resetSchemaOnF
34380 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20  ault-1);.  }..  
34390 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
343a0 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
343b0 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
343c0 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
343d0 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
343e0 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
343f0 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
34400 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
34410 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
34420 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  :.  db->lastRowi
34430 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
34440 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74   testcase( nVmSt
34450 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f  ep>0 );.  p->aCo
34460 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
34470 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d  TSTATUS_VM_STEP]
34480 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70   += (int)nVmStep
34490 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c  ;.  sqlite3VdbeL
344a0 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72  eave(p);.  retur
344b0 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  n rc;..  /* Jump
344c0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74   to here if a st
344d0 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72  ring or blob lar
344e0 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f  ger than SQLITE_
344f0 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20  MAX_LENGTH.  ** 
34500 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
34510 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20    */.too_big:.  
34520 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
34530 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
34540 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  , "string or blo
34550 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72  b too big");.  r
34560 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  c = SQLITE_TOOBI
34570 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  G;.  goto vdbe_e
34580 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
34590 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
345a0 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
345b0 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a  s..  */.no_mem:.
345c0 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
345d0 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ed = 1;.  sqlite
345e0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
345f0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74  ErrMsg, db, "out
34600 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20   of memory");.  
34610 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
34620 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  M;.  goto vdbe_e
34630 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
34640 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f   Jump to here fo
34650 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64  r any other kind
34660 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e   of fatal error.
34670 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61    The "rc" varia
34680 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20  ble.  ** should 
34690 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e  hold the error n
346a0 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  umber..  */.abor
346b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a  t_due_to_error:.
346c0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72    assert( p->zEr
346d0 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  rMsg==0 );.  if(
346e0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
346f0 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  d ) rc = SQLITE_
34700 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21  NOMEM;.  if( rc!
34710 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
34720 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  MEM ){.    sqlit
34730 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
34740 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
34750 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
34760 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (rc));.  }.  got
34770 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
34780 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
34790 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c   here if the sql
347a0 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
347b0 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e   API sets the in
347c0 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61  terrupt.  ** fla
347d0 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  g..  */.abort_du
347e0 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a  e_to_interrupt:.
347f0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31    assert( db->u1
34800 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
34810 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
34820 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e  INTERRUPT;.  p->
34830 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74  rc = rc;.  sqlit
34840 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
34850 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
34860 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
34870 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64  (rc));.  goto vd
34880 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d  be_error_halt;.}
34890 0a                                               .