/ Hex Artifact Content
Login

Artifact 4f0378eb44406a6a61686dff7970fa314f0f44bd:


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 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fa0: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a  T_BUILTIN_TEST).
0fb0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
0fc0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20  MAX_BLOBSIZE(P) 
0fd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0fe0: 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  ze(P).#else.# de
0ff0: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1000: 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64  BLOBSIZE(P).#end
1010: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  if../*.** Invoke
1020: 20 74 68 65 20 56 44 42 45 20 63 6f 76 65 72 61   the VDBE covera
1030: 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20  ge callback, if 
1040: 74 68 61 74 20 63 61 6c 6c 62 61 63 6b 20 69 73  that callback is
1050: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 69 73 0a   defined.  This.
1060: 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 75 73  ** feature is us
1070: 65 64 20 66 6f 72 20 74 65 73 74 20 73 75 69 74  ed for test suit
1080: 65 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c  e validation onl
1090: 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  y and does not a
10a0: 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64  ppear an.** prod
10b0: 75 63 74 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a  uction builds..*
10c0: 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74  *.** M is an int
10d0: 65 67 65 72 2c 20 32 20 6f 72 20 33 2c 20 74 68  eger, 2 or 3, th
10e0: 61 74 20 69 6e 64 69 63 65 73 20 68 6f 77 20 6d  at indices how m
10f0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
1100: 79 73 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  ys the.** branch
1110: 20 63 61 6e 20 67 6f 2e 20 20 49 74 20 69 73 20   can go.  It is 
1120: 75 73 75 61 6c 6c 79 20 32 2e 20 20 22 49 22 20  usually 2.  "I" 
1130: 69 73 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e  is the direction
1140: 20 74 68 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67   the branch.** g
1150: 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73 20 66 61  oes.  0 means fa
1160: 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20 20 31 20  lls through.  1 
1170: 6d 65 61 6e 73 20 62 72 61 6e 63 68 20 69 73 20  means branch is 
1180: 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20  taken.  2 means 
1190: 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c  the.** second al
11a0: 74 65 72 6e 61 74 69 76 65 20 62 72 61 6e 63 68  ternative branch
11b0: 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a   is taken..**.**
11c0: 20 69 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65   iSrcLine is the
11d0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e   source code lin
11e0: 65 20 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49  e (from the __LI
11f0: 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74  NE__ macro) that
1200: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68  .** generated th
1210: 65 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  e VDBE instructi
1220: 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  on.  This instru
1230: 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73 75 6d 65  mentation assume
1240: 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f  s that all.** so
1250: 75 72 63 65 20 63 6f 64 65 20 69 73 20 69 6e 20  urce code is in 
1260: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 28 74  a single file (t
1270: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 29  he amalgamation)
1280: 2e 20 20 53 70 65 63 69 61 6c 20 76 61 6c 75 65  .  Special value
1290: 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20 66 6f 72  s 1.** and 2 for
12a0: 20 74 68 65 20 69 53 72 63 4c 69 6e 65 20 70 61   the iSrcLine pa
12b0: 72 61 6d 65 74 65 72 20 6d 65 61 6e 20 74 68 61  rameter mean tha
12c0: 74 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  t this particula
12d0: 72 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a 20 61  r branch is.** a
12e0: 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f 72 20 6e  lways taken or n
12f0: 65 76 65 72 20 74 61 6b 65 6e 2c 20 72 65 73 70  ever taken, resp
1300: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66  ectively..*/.#if
1310: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1320: 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a  _VDBE_COVERAGE).
1330: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1340: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65  nchTaken(I,M).#e
1350: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62  lse.# define Vdb
1360: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1370: 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  ) vdbeTakeBranch
1380: 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49  (pOp->iSrcLine,I
1390: 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69  ,M).  static voi
13a0: 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  d vdbeTakeBranch
13b0: 28 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75  (int iSrcLine, u
13c0: 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20  8 I, u8 M){.    
13d0: 69 66 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20  if( iSrcLine<=2 
13e0: 26 26 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69  && ALWAYS(iSrcLi
13f0: 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d  ne>0) ){.      M
1400: 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20   = iSrcLine;.   
1410: 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65     /* Assert the
1420: 20 74 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f   truth of VdbeCo
1430: 76 65 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65  verageAlwaysTake
1440: 6e 28 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a  n() and .      *
1450: 2a 20 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65  * VdbeCoverageNe
1460: 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20  verTaken() */.  
1470: 20 20 20 20 61 73 73 65 72 74 28 20 28 4d 20 26      assert( (M &
1480: 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65   I)==I );.    }e
1490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73  lse{.      if( s
14a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14b0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
14c0: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
14d0: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73  O_TEST*/.      s
14e0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14f0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73  ig.xVdbeBranch(s
1500: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1510: 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72  ig.pVdbeBranchAr
1520: 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g,.             
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 69 53 72 63 4c 69 6e           iSrcLin
1550: 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20  e,I,M);.    }.  
1560: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1570: 43 6f 6e 76 65 72 74 20 74 68 65 20 67 69 76 65  Convert the give
1580: 6e 20 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20  n register into 
1590: 61 20 73 74 72 69 6e 67 20 69 66 20 69 74 20 69  a string if it i
15a0: 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65  sn't one.** alre
15b0: 61 64 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  ady. Return non-
15c0: 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63  zero if a malloc
15d0: 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65  () fails..*/.#de
15e0: 66 69 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50  fine Stringify(P
15f0: 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28  , enc) \.   if((
1600: 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (P)->flags&(MEM_
1610: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
1620: 30 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  0 && sqlite3Vdbe
1630: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65  MemStringify(P,e
1640: 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20 20 7b 20  nc,0)) \.     { 
1650: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a  goto no_mem; }..
1660: 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65 72  /*.** An ephemer
1670: 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  al string value 
1680: 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74 68  (signified by th
1690: 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61 67  e MEM_Ephem flag
16a0: 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61 20  ) contains.** a 
16b0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79 6e  pointer to a dyn
16c0: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
16d0: 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65 20  ed string where 
16e0: 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69 74  some other entit
16f0: 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73 69  y.** is responsi
1700: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
1710: 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e 67  ting that string
1720: 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 72  .  Because the r
1730: 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73 20  egister.** does 
1740: 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20  not control the 
1750: 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68 74  string, it might
1760: 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74 68   be deleted with
1770: 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65 72  out the register
1780: 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a  .** knowing it..
1790: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
17a0: 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 65  ne converts an e
17b0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
17c0: 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  into a dynamical
17d0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  ly allocated.** 
17e0: 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65 20  string that the 
17f0: 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66 20  register itself 
1800: 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f 74  controls.  In ot
1810: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a 2a  her words, it.**
1820: 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45 4d   converts an MEM
1830: 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69 6e  _Ephem string in
1840: 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  to a string with
1850: 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e   P.z==P.zMalloc.
1860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1870: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1880: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1890: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
18a0: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
18b0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
18c0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
18d0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
18e0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18f0: 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f  the cursor was o
1900: 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1910: 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70  OP_OpenSorter op
1920: 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  code. */.#define
1930: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
1940: 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  )->eCurType==CUR
1950: 54 59 50 45 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a  TYPE_SORTER)../*
1960: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62  .** Allocate Vdb
1970: 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69  eCursor number i
1980: 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70  Cur.  Return a p
1990: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52  ointer to it.  R
19a0: 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66  eturn NULL.** if
19b0: 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d   we run out of m
19c0: 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  emory..*/.static
19d0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c   VdbeCursor *all
19e0: 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56  ocateCursor(.  V
19f0: 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  dbe *p,         
1a00: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
1a10: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
1a20: 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20   int iCur,      
1a30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a40: 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43  of the new VdbeC
1a50: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  ursor */.  int n
1a60: 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20  Field,          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
1a80: 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  elds in the tabl
1a90: 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20  e or index */.  
1aa0: 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20  int iDb,        
1ab0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1ac0: 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c  e the cursor bel
1ad0: 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a  ongs to, or -1 *
1ae0: 2f 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 20  /.  u8 eCurType 
1af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70            /* Typ
1b00: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 75 72  e of the new cur
1b10: 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  sor */.){.  /* F
1b20: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1b30: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1b40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b50: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1b60: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1b70: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1b80: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b90: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ba0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1bb0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bc0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bd0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1be0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1bf0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1c00: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1c10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1c20: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1c30: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1c40: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1c50: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1c60: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1c70: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1c80: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1c90: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1ca0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1cb0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1cc0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1cd0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ce0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1cf0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1d00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1d10: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1d20: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1d30: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1d40: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1d50: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1d60: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1d70: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1d80: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1d90: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1da0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1dc0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1dd0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 65 6d   **.  ** The mem
1df0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 63 75 72  ory cell for cur
1e00: 73 6f 72 20 30 20 69 73 20 61 4d 65 6d 5b 30 5d  sor 0 is aMem[0]
1e10: 2e 20 54 68 65 20 72 65 73 74 20 61 72 65 20 61  . The rest are a
1e20: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 20 20  llocated from.  
1e30: 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  ** the top of th
1e40: 65 20 72 65 67 69 73 74 65 72 20 73 70 61 63 65  e register space
1e50: 2e 20 20 43 75 72 73 6f 72 20 31 20 69 73 20 61  .  Cursor 1 is a
1e60: 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 31 5d  t Mem[p->nMem-1]
1e70: 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72 20 32 20  ..  ** Cursor 2 
1e80: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
1e90: 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20 66 6f 72  m-2]. And so for
1ea0: 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  th..  */.  Mem *
1eb0: 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30 20 3f 20  pMem = iCur>0 ? 
1ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ed0: 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61 4d 65 6d  -iCur] : p->aMem
1ee0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ef0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f00: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f10: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1f20: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1f30: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1f40: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1f50: 20 20 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55     (eCurType==CU
1f60: 52 54 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69  RTYPE_BTREE?sqli
1f70: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f80: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1f90: 72 74 28 20 69 43 75 72 3e 3d 30 20 26 26 20 69  rt( iCur>=0 && i
1fa0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
1fb0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
1fc0: 5b 69 43 75 72 5d 20 29 7b 20 2f 2a 4f 50 54 49  [iCur] ){ /*OPTI
1fd0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
1fe0: 45 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56  E*/.    sqlite3V
1ff0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2000: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2010: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2020: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2030: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2040: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2050: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2060: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2080: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
2090: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
20a0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
20b0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20c0: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43  r));.    pCx->eC
20d0: 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79 70  urType = eCurTyp
20e0: 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  e;.    pCx->iDb 
20f0: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
2100: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
2110: 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73 65  .    pCx->aOffse
2120: 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65 5b  t = &pCx->aType[
2130: 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28  nField];.    if(
2140: 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59   eCurType==CURTY
2150: 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2160: 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f    pCx->uc.pCurso
2170: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2180: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2190: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
21a0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
21b0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
21c0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
21d0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
21e0: 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  o(pCx->uc.pCurso
21f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2200: 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f  return pCx;.}../
2210: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2220: 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f  ert a value into
2230: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2240: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20  sentation if we 
2250: 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74  can.** do so wit
2260: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66  hout loss of inf
2270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  ormation.  In ot
2280: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2290: 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b  e string.** look
22a0: 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  s like a number,
22b0: 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f   convert it into
22c0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69   a number.  If i
22d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f  t does not.** lo
22e0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
22f0: 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65  , leave it alone
2300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62  ..**.** If the b
2310: 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69  TryForInt flag i
2320: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74  s true, then ext
2330: 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64  ra effort is mad
2340: 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20  e to give.** an 
2350: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2360: 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73  tation.  Strings
2370: 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20   that look like 
2380: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a  floating point.*
2390: 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68 69  * values but whi
23a0: 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74  ch have no fract
23b0: 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20  ional component 
23c0: 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30  (example: '48.00
23d0: 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20  ').** will have 
23e0: 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73  a MEM_Int repres
23f0: 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54  entation when bT
2400: 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65  ryForInt is true
2410: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46  ..**.** If bTryF
2420: 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20  orInt is false, 
2430: 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  then if the inpu
2440: 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  t string contain
2450: 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70  s a decimal.** p
2460: 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74  oint or exponent
2470: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68  ial notation, th
2480: 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79  e result is only
2490: 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a   MEM_Real, even.
24a0: 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ** if there is a
24b0: 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72 20  n exact integer 
24c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24d0: 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a  f the quantity..
24e0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
24f0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2500: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69  ity(Mem *pRec, i
2510: 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a  nt bTryForInt){.
2520: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2530: 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20  .  i64 iValue;. 
2540: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2550: 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 28  enc;.  assert( (
2560: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
2570: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d  EM_Str|MEM_Int|M
2580: 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53  EM_Real))==MEM_S
2590: 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
25a0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
25b0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
25c0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
25d0: 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  urn;.  if( 0==sq
25e0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
25f0: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2600: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2610: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
2620: 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d  Value;.    pRec-
2630: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e  >flags |= MEM_In
2640: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2650: 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c  pRec->u.r = rVal
2660: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2680: 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f 72  .    if( bTryFor
2690: 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64 62  Int ) sqlite3Vdb
26a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
26b0: 28 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  (pRec);.  }.}../
26c0: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
26d0: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
26e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
26f0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2710: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2720: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2730: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2740: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2750: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2760: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2770: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2780: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
27a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
27b0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
27c0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
27d0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
27e0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
27f0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2800: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2810: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2820: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2830: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2840: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2850: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2860: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2870: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2880: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2890: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
28a0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
28b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
28c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  .** SQLITE_AFF_B
28d0: 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  LOB:.**    No-op
28e0: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
28f0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2900: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2910: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2930: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2940: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2950: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2960: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2970: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2980: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
29a0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
29b0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
29c0: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
29d0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
29e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
29f0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a00: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a30: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2a50: 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28 20  ERIC );.    if( 
2a60: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
2a70: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a  EM_Int)==0 ){ /*
2a80: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
2a90: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
2aa0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2ab0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
2ac0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
2ad0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  c->flags & MEM_S
2ae0: 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69  tr ) applyNumeri
2af0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2b00: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2b20: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b30: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  }.    }.  }else 
2b50: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2b60: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2b70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2b80: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2b90: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2ba0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2bb0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2bc0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2bd0: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2be0: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2bf0: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2c00: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2c10: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 77  sentation.  It w
2c20: 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73  ould be harmless
2c30: 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20 63   to repeat the c
2c40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20 20  onversion if .  
2c50: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 6c    ** there is al
2c60: 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20 72  ready a string r
2c70: 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70 6f  ep, but it is po
2c80: 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74 65  intless to waste
2c90: 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50   those.    ** CP
2ca0: 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20  U cycles. */.   
2cb0: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2cc0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b  lags&MEM_Str) ){
2cd0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
2ce0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
2cf0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2d00: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2d10: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 20  Int)) ){.       
2d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d30: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
2d40: 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  nc, 1);.      }.
2d50: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2d60: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2d70: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
2d80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2d90: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2da0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2db0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2dc0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2dd0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2de0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2df0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2e00: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2e10: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2e20: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2e30: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2e40: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2e50: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2e60: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2e70: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2e80: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2e90: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2ea0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2eb0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2ec0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2ed0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20  e *pVal){.  int 
2ee0: 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f  eType = sqlite3_
2ef0: 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29  value_type(pVal)
2f00: 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d 53  ;.  if( eType==S
2f10: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
2f20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2f30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61 70  em*)pVal;.    ap
2f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2f50: 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20  ty(pMem, 0);.   
2f60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2f70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2f80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2f90: 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  eType;.}../*.** 
2fa0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2fb0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2fc0: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2fd0: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2fe0: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2ff0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
3000: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
3010: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
3020: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
3030: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
3040: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
3050: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
3060: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
3070: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
3080: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ity, enc);.}../*
3090: 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e 74  .** pMem current
30a0: 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20  ly only holds a 
30b0: 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72 20  string type (or 
30c0: 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68 61  maybe a BLOB tha
30d0: 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65  t we can.** inte
30e0: 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69 6e  rpret as a strin
30f0: 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f 29  g if we want to)
3100: 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20 63  .  Compute its c
3110: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3120: 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69 66  numeric type, if
3130: 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20 74   has one.  Set t
3140: 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64  he pMem->u.r and
3150: 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c 64   pMem->u.i field
3160: 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c 79  s.** accordingly
3170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20  ..*/.static u16 
3180: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
3190: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
31c0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
31d0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
31e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
31f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3200: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
3210: 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
3220: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
3230: 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d  &pMem->u.r, pMem
3240: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3250: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3260: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
3270: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
3280: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
3290: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
32a0: 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  enc)==SQLITE_OK 
32b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
32c0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
32d0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
32e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32f0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3300: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3310: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3320: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3330: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3340: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3350: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3360: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3370: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3380: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3390: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
33a0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
33b0: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
33c0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
33d0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
33e0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
33f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3400: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
3410: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
3420: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3430: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a  _Int|MEM_Real);.
3440: 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e    }.  if( pMem->
3450: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3460: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
3470: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65    return compute
3480: 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d  NumericType(pMem
3490: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a0: 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  0;.}..#ifdef SQL
34b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
34c0: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
34d0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
34e0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
34f0: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
3500: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
3510: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
3520: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3530: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3540: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
3550: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
3560: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
3570: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
3580: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
3590: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
35a0: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
35b0: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
35c0: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
35d0: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
35e0: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
35f0: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
3600: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3610: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
3620: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3630: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3640: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3650: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3660: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3670: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
3680: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3690: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
36a0: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
36b0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
36c0: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
36d0: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
36e0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
36f0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3700: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3720: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
3730: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
3760: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3770: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3780: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3790: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
37a0: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
37b0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
37c0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
37d0: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
37e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
37f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3800: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3810: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
3820: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
3830: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
3840: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3860: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
3870: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3880: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3890: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
38a0: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
38b0: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
38c0: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
38d0: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
38e0: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
38f0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3900: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3910: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3920: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3930: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3940: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3950: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
3960: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
3970: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3980: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
3990: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
39a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
39b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
39d0: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
39e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
39f0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
3a00: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
3a10: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
3a20: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
3a30: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3a40: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3a50: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3a60: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3a70: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3a80: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3a90: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3aa0: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3ab0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3ac0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3ad0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3ae0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3af0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3b00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
3b10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3b20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3b30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b50: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3b60: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3b70: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3b80: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3b90: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3ba0: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3bb0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3bc0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3bd0: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3be0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3bf0: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
3c00: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
3c10: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
3c20: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
3c30: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
3c40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
3c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3c60: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3c70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3c80: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3c90: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3ca0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3cb0: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3cc0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3cd0: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3ce0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3cf0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3d00: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
3d10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3d20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3d30: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
3d40: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
3d50: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3d60: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3d70: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3d80: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3d90: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3da0: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3db0: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3dc0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3dd0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3de0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3df0: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3e00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
3e10: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3e20: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
3e30: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
3e40: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
3e50: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3e70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3e80: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3e90: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3ea0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3eb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3ec0: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3ed0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3ee0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3ef0: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3f00: 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  u.r);.#endif.  }
3f10: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3f20: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3f30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3f40: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3f50: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3f60: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3f70: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3f80: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
3f90: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
3fa0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69  , zBuf);.  }.  i
3fb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3fc0: 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e  M_Subtype ) prin
3fd0: 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25  tf(" subtype=0x%
3fe0: 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70  02x", p->eSubtyp
3ff0: 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  e);.}.static voi
4000: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
4010: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
4020: 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47  ){.  printf("REG
4030: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
4040: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
4050: 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c  (p);.  printf("\
4060: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
4070: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4080: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
4090: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
40a0: 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51   if(db->flags&SQ
40b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72  LITE_VdbeTrace)r
40c0: 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d  egisterTrace(R,M
40d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
40e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
40f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
4100: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4110: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
4120: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
4130: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
4140: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
4150: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
4160: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
4170: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
4180: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
4190: 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ..#endif..#ifnde
41a0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
41b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
41c0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
41d0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
41e0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
41f0: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
4200: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
4220: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
4230: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
4240: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
4250: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
4260: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
4270: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
4280: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
4290: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
42a0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
42b0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
42c0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
42d0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
42e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
42f0: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
4300: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
4310: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
4320: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
4330: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
4340: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
4350: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
4360: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
4370: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
4380: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
4390: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
43a0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
43b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
43c0: 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70  gister of pOp->p
43d0: 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72  2 after first pr
43e0: 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65  eparing it to be
43f0: 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20  .** overwritten 
4400: 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20  with an integer 
4410: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4420: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
4430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4440: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65  easeWithClear(Me
4450: 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69  m *pOut){.  sqli
4460: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4470: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
4480: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
44a0: 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f  .}.static Mem *o
44b0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64  ut2Prerelease(Vd
44c0: 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70  be *p, VdbeOp *p
44d0: 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  Op){.  Mem *pOut
44e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
44f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
4500: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
4520: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
4530: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
4540: 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
4550: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
4560: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
4570: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f  namic(pOut) ){ /
4580: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
4590: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74  -FALSE*/.    ret
45a0: 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61  urn out2Prerelea
45b0: 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74  seWithClear(pOut
45c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
45d0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
45e0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72  M_Int;.    retur
45f0: 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a  n pOut;.  }.}...
4600: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4610: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4620: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4630: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4640: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4650: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4660: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4670: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
46a0: 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  ){.  Op *aOp = p
46b0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
46c0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
46d0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d  p */.  Op *pOp =
46e0: 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20   aOp;           
46f0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4700: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65  ration */.#if de
4710: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4720: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
4730: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f  DBE_PROFILE).  O
4740: 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20  p *pOrigOp;     
4750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
4760: 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65  ue of pOp at the
4770: 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70   top of the loop
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
4790: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
47a0: 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74   int nExtraDelet
47b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56  e = 0;      /* V
47c0: 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54  erifies FORDELET
47d0: 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  E and AUXDELETE 
47e0: 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  flags */.#endif.
47f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4800: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4810: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4820: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4830: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4840: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4850: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4860: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4870: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4880: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4890: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
48a0: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
48b0: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
48c0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
48d0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
48e0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4900: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4910: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4920: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4930: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4940: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4950: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
4960: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4970: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4980: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
4990: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
49a0: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
49b0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
49c0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
49d0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
49e0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
49f0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4a00: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
4a10: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
4a20: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4a30: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4a40: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4a50: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4a60: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a80: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4aa0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4ab0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4ac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4ad0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4ae0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
4af0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
4b00: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
4b10: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
4b20: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4b30: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
4b40: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
4b50: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
4b60: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
4b70: 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66 20  ROWID */.#ifdef 
4b80: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
4b90: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4ba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4bb0: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4bc0: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4bd0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4be0: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4bf0: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4c00: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4c10: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4c20: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4c30: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4c40: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4c50: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4c60: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4c70: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4c80: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4c90: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4ca0: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4cb0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4cc0: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4cd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4ce0: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4cf0: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4d00: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4d10: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4d20: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
4d30: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
4d40: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4d50: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4d60: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4d70: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4d80: 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  _OK;.  p->iCurre
4d90: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4da0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4db0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4dc0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4dd0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4de0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4df0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4e00: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4e10: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4e20: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4e30: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4e40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4e50: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4e60: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4e70: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4e80: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4e90: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4ea0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4eb0: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4ec0: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4ed0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4ee0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4ef0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4f00: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4f10: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4f20: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
4f30: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4f40: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4f50: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4f60: 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20   p->pc==0.   && 
4f70: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4f80: 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  (SQLITE_VdbeList
4f90: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45  ing|SQLITE_VdbeE
4fa0: 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  QP|SQLITE_VdbeTr
4fb0: 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  ace))!=0.  ){.  
4fc0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
4fd0: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73   once = 1;.    s
4fe0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4ff0: 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ql(p);.    if( p
5000: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
5010: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
5020: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
5030: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
5040: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
5050: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5060: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5070: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5080: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
5090: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
50a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
50b0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
50c0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
50d0: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
50e0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
50f0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
5100: 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[i].opcode==OP_
5110: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
5120: 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20       if( once ) 
5130: 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65  printf("VDBE Que
5140: 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20  ry Plan:\n");.  
5150: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
5160: 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34  %s\n", aOp[i].p4
5170: 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  .z);.          o
5180: 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nce = 0;.       
5190: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
51a0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
51b0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
51c0: 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e  dbeTrace )  prin
51d0: 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c  tf("VDBE Trace:\
51e0: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
51f0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
5200: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
5210: 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63  r(pOp=&aOp[p->pc
5220: 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20  ]; 1; pOp++){.  
5230: 20 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20    /* Errors are 
5240: 64 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69  detected by indi
5250: 76 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20  vidual opcodes, 
5260: 77 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74  with an immediat
5270: 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74  e.    ** jumps t
5280: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
5290: 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73  rror. */.    ass
52a0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
52b0: 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72  OK );..    asser
52c0: 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70  t( pOp>=aOp && p
52d0: 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29  Op<&aOp[p->nOp])
52e0: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
52f0: 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20  OFILE.    start 
5300: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
5310: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
5320: 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20  mStep++;.#ifdef 
5330: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5340: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
5350: 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20    if( p->anExec 
5360: 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74  ) p->anExec[(int
5370: 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23  )(pOp-aOp)]++;.#
5380: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5390: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
53a0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
53b0: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
53c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
53d0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
53e0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
53f0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
5400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5410: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
5420: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
5430: 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  ), pOp);.    }.#
5440: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
5450: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
5460: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
5470: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
5480: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
5490: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
54a0: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
54b0: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
54c0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
54d0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
54e0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
54f0: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
5500: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
5510: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
5520: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
5530: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5540: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
5550: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5560: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
5570: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
5580: 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
5590: 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f  cking on other o
55a0: 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65  perands */.#ifde
55b0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
55c0: 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70     {.      u8 op
55d0: 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74  Property = sqlit
55e0: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
55f0: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20  [pOp->opcode];. 
5600: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5610: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31  erty & OPFLG_IN1
5620: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5630: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5640: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5650: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
5660: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5670: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5680: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5690: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
56a0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
56b0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
56c0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
56d0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
56e0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
56f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5700: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
5710: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20  Op->p1]);.      
5720: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5730: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5740: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
5750: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5760: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5770: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5780: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5790: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
57a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
57b0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
57c0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
57d0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
57e0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
57f0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
5800: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5810: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5820: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
5830: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5840: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5850: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5860: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
5870: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5880: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
5890: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
58a0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
58b0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
58c0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
58d0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
58e0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
58f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5900: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5910: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5920: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5930: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5940: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
5950: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5960: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5970: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5980: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
5990: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
59a0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
59b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
59c0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
59d0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
59e0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
59f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5a00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
5a10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5a20: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5a30: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
5a40: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
5a50: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5a60: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5a70: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5a80: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
5a90: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
5aa0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5ab0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5ac0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5ad0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
5ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
5af0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
5b00: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f  _PROFILE).    pO
5b10: 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e  rigOp = pOp;.#en
5b20: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5b30: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5b40: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b90: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5ba0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5bb0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5bc0: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5bd0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5be0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5bf0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5c00: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5c10: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5c20: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5c30: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5c40: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5c50: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5c60: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5c70: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5c80: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5c90: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5ca0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5cb0: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5cc0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5cd0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5ce0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5cf0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5d00: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5d10: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5d20: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5d30: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5d40: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5d50: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5d60: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5d70: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5d80: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5d90: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5da0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5db0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5dc0: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5dd0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5de0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5df0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5e00: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5e10: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5e20: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5e30: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5e40: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5e50: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5e60: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5e70: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5e80: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5e90: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5ea0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5eb0: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5ec0: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5ed0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5ee0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5ef0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5f00: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5f10: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5f20: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5f30: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5f40: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5f50: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5f60: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5f70: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5f80: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5f90: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5fa0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5fb0: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5fc0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5fd0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5fe0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5ff0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
6000: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
6010: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
6020: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
6030: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6040: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6050: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
6060: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
6070: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
6080: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
6090: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
60a0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
60b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
60c0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
60d0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
60e0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
60f0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
6100: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
6110: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
6120: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
6130: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
6140: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
6150: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
6160: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
6170: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
6180: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
6190: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
61a0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
61b0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
61c0: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
61d0: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
61e0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
61f0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
6200: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
6210: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
6220: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
6230: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6240: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
62a0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
62b0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
62c0: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
62d0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
62e0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
62f0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
6300: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
6310: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
6320: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
6330: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
6340: 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  m..**.** The P1 
6350: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
6360: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62   actually used b
6370: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
6380: 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69  However, it.** i
6390: 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20  s sometimes set 
63a0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
63b0: 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74  0 as a hint to t
63c0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
63d0: 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68  shell.** that th
63e0: 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62  is Goto is the b
63f0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6400: 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e  and that the lin
6410: 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a  es from P2 down.
6420: 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ** to the curren
6430: 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65  t line should be
6440: 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58   indented for EX
6450: 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f  PLAIN output..*/
6460: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6480: 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  jump */.jump_to_
6490: 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
64a0: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f  _interrupt:.  pO
64b0: 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
64c0: 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63   - 1];..  /* Opc
64d0: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
64e0: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
64f0: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
6500: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
6510: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f  ** OP_VNext, OP_
6520: 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f  RowSetNext, or O
6530: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6540: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6550: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6560: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6570: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6580: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6590: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
65a0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
65b0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
65c0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
65d0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
65e0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
65f0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6600: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6610: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6620: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6630: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6640: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6650: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6660: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6670: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6680: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6690: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
66a0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
66b0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
66c0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
66d0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
66e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
66f0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6700: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6710: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6720: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6730: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6740: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6750: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6760: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6770: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6780: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6790: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
67a0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
67b0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
67c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
67d0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
67e0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
67f0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6800: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6810: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6820: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6830: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6840: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6850: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6860: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6870: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6880: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6890: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
68a0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
68b0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
68c0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
68d0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
68e0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
68f0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6900: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
6910: 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65  ess!=0 && nVmSte
6920: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
6930: 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t ){.    assert(
6940: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6950: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6960: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6970: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6980: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6990: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
69a0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
69b0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
69c0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
69d0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
69e0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
69f0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6a00: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6a10: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6a20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6a30: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6a40: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6a50: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6a60: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6a70: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6a80: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6a90: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6aa0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6ac0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6ad0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6ae0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6af0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6b00: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6b10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6b20: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6b30: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6b40: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6b50: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6b60: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6b70: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6b80: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6b90: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6ba0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6bb0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6bc0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6bd0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6be0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6bf0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6c00: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6c10: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6c20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6c30: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6c40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6c50: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6c60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6c70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6c80: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6c90: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6ca0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6cb0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6cc0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6cd0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6ce0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6d00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6d10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6d20: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6d30: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6d40: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6d50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6d60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6d70: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6d80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6d90: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6da0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6db0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6dc0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6dd0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6de0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6df0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6e00: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6e10: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6e20: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6e30: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6e40: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6e50: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6e60: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6e70: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6e80: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6e90: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6ea0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6eb0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6ec0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6ed0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6ee0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6ef0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6f00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6f10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6f20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6f30: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6f40: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6f50: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6f60: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6f70: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6f80: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6f90: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6fa0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6fb0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6fc0: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6fd0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6fe0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6ff0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
7000: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7010: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
7020: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
7030: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
7040: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
7050: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7060: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
7070: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
7080: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
7090: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
70a0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
70b0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
70c0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
70d0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
70e0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
70f0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
7100: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
7110: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
7120: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7130: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7140: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7150: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7160: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7170: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7180: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7190: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
71a0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
71b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
71c0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
71d0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
71e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
71f0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
7200: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
7210: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
7220: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7230: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7240: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7250: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7260: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7270: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7280: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7290: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
72a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
72b0: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
72c0: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
72d0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
72e0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
72f0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
7300: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
7310: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7320: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7330: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7340: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7350: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7360: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7370: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7380: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7390: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
73a0: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
73b0: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
73c0: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
73d0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
73e0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
73f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7400: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7410: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7420: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7430: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7440: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7450: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7460: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7470: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7480: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7490: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
74a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
74b0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
74c0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
74d0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
74e0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
74f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7500: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7510: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7530: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7540: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7550: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7560: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
7570: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
7580: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
7590: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
75a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
75b0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
75c0: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
75d0: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
75e0: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
75f0: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
7600: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
7610: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
7620: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
7630: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
7640: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
7650: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
7660: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
7670: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
7680: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
7690: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
76a0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
76b0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
76c0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
76d0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
76e0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
76f0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7700: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7710: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7720: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7730: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7740: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
7750: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7760: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7770: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7780: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7790: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
77a0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
77b0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
77c0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
77d0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
77e0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
77f0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7800: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7810: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7820: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7830: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7840: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
7850: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7860: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7870: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7880: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7890: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
78a0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
78b0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
78c0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
78d0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
78e0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
78f0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7900: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7910: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7920: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7930: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7940: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
7950: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7960: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7970: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7980: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7990: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
79a0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
79b0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
79c0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
79d0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
79e0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
79f0: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
7a00: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
7a10: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
7a20: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
7a30: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7a40: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
7a50: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7a60: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
7a70: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
7a80: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7a90: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
7aa0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
7ab0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
7ac0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
7ad0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
7ae0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
7af0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
7b00: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
7b10: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
7b20: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
7b30: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
7b40: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
7b50: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
7b60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7b70: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
7b80: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
7b90: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
7ba0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
7bb0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
7bc0: 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Type;.  const ch
7bd0: 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56  ar *zLogFmt;.  V
7be0: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
7bf0: 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20  ;.  int pcx;..  
7c00: 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  pcx = (int)(pOp 
7c10: 2d 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f  - aOp);.  if( pO
7c20: 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->p1==SQLITE_OK
7c30: 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b   && p->pFrame ){
7c40: 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65  .    /* Halt the
7c50: 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65   sub-program. Re
7c60: 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  turn control to 
7c70: 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
7c80: 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20  . */.    pFrame 
7c90: 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20  = p->pFrame;.   
7ca0: 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
7cb0: 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20  ame->pParent;.  
7cc0: 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20    p->nFrame--;. 
7cd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7ce0: 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e  tChanges(db, p->
7cf0: 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63  nChange);.    pc
7d00: 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46  x = sqlite3VdbeF
7d10: 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61  rameRestore(pFra
7d20: 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77  me);.    lastRow
7d30: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
7d40: 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  id;.    if( pOp-
7d50: 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29  >p2==OE_Ignore )
7d60: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72  {.      /* Instr
7d70: 75 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68  uction pcx is th
7d80: 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61  e OP_Program tha
7d90: 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75  t invoked the su
7da0: 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20  b-program .     
7db0: 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65   ** currently be
7dc0: 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74  ing halted. If t
7dd0: 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f  he p2 instructio
7de0: 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c  n of this OP_Hal
7df0: 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72  t.      ** instr
7e00: 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f  uction is set to
7e10: 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e   OE_Ignore, then
7e20: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7e30: 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20   is throwing.   
7e40: 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20     ** an IGNORE 
7e50: 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68  exception. In th
7e60: 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20  is case jump to 
7e70: 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63  the address spec
7e80: 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  ified.      ** a
7e90: 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20  s the p2 of the 
7ea0: 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
7eb0: 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63  am.  */.      pc
7ec0: 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e  x = p->aOp[pcx].
7ed0: 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2-1;.    }.    
7ee0: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
7ef0: 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d    aMem = p->aMem
7f00: 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70  ;.    pOp = &aOp
7f10: 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b  [pcx];.    break
7f20: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20  ;.  }.  p->rc = 
7f30: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72  pOp->p1;.  p->er
7f40: 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29  rorAction = (u8)
7f50: 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63  pOp->p2;.  p->pc
7f60: 20 3d 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d   = pcx;.  if( p-
7f70: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
7f80: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
7f90: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
7fa0: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
7fb0: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
7fc0: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
7fd0: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
8010: 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   };.      assert
8020: 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20  ( pOp->p5>=1 && 
8030: 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20  pOp->p5<=4 );.  
8040: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8050: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
8060: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8070: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
8080: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
8090: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
80a0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
80b0: 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70  =4 );.      zTyp
80c0: 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e  e = azType[pOp->
80d0: 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65  p5-1];.    }else
80e0: 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20  {.      zType = 
80f0: 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  0;.    }.    ass
8100: 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c  ert( zType!=0 ||
8110: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8120: 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22  .    zLogFmt = "
8130: 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b  abort at %d in [
8140: 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66  %s]: %s";.    if
8150: 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e  ( zType && pOp->
8160: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71  p4.z ){.      sq
8170: 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
8180: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
8190: 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 7a 54   failed: %s", zT
81a0: 79 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ype, pOp->p4.z);
81b0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
81c0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
81d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
81e0: 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d  or(p, "%s", pOp-
81f0: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73  >p4.z);.    }els
8200: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
8210: 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
8220: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
8230: 65 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20  ed", zType);.   
8240: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   }.    sqlite3_l
8250: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67  og(pOp->p1, zLog
8260: 46 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71  Fmt, pcx, p->zSq
8270: 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  l, p->zErrMsg);.
8280: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
8290: 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20  e3VdbeHalt(p);. 
82a0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
82b0: 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d  ITE_BUSY || rc==
82c0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
82d0: 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b  =SQLITE_ERROR );
82e0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
82f0: 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d  E_BUSY ){.    p-
8300: 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
8310: 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b  E_BUSY;.  }else{
8320: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
8330: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
8340: 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49  ->rc&0xff)==SQLI
8350: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b  TE_CONSTRAINT );
8360: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
8370: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62  =SQLITE_OK || db
8380: 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e  ->nDeferredCons>
8390: 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 || db->nDeferr
83a0: 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20  edImmCons>0 );. 
83b0: 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20     rc = p->rc ? 
83c0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53  SQLITE_ERROR : S
83d0: 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a  QLITE_DONE;.  }.
83e0: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
83f0: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
8400: 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20  : Integer P1 P2 
8410: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
8420: 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a  s: r[P2]=P1.**.*
8430: 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74  * The 32-bit int
8440: 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73  eger value P1 is
8450: 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65   written into re
8460: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8470: 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b  se OP_Integer: {
8480: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8490: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
84a0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
84b0: 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
84c0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
84d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
84e0: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
84f0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8500: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
8510: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
8520: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
8530: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
8540: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8550: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8560: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
8570: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
8580: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75  /* out2 */.  pOu
8590: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
85a0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
85b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
85c0: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
85d0: 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.i = *pOp->p4.
85e0: 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
85f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8600: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
8610: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
8620: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
8630: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8640: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8650: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8660: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
8670: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
8680: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
8690: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
86a0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
86b0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
86c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
86d0: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a  _FLOAT, out2 */.
86e0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
86f0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8700: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8710: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73   MEM_Real;.  ass
8720: 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e  ert( !sqlite3IsN
8730: 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61  aN(*pOp->p4.pRea
8740: 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  l) );.  pOut->u.
8750: 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  r = *pOp->p4.pRe
8760: 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  al;.  break;.}.#
8770: 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
8780: 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a  : String8 * P2 *
8790: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
87a0: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a  s: r[P2]='P4'.**
87b0: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
87c0: 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65   a nul terminate
87d0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20  d UTF-8 string. 
87e0: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74  This opcode is t
87f0: 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69  ransformed .** i
8800: 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63  nto a String opc
8810: 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  ode before it is
8820: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68   executed for th
8830: 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44  e first time.  D
8840: 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72  uring.** this tr
8850: 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68  ansformation, th
8860: 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69  e length of stri
8870: 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65  ng P4 is compute
8880: 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20  d and stored.** 
8890: 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d 65  as the P1 parame
88a0: 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ter..*/.case OP_
88b0: 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20  String8: {      
88c0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
88d0: 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f  _STRING, out2 */
88e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
88f0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
8900: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8910: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
8920: 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53  p->opcode = OP_S
8930: 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31  tring;.  pOp->p1
8940: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
8950: 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a  30(pOp->p4.z);..
8960: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8970: 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20  MIT_UTF16.  if( 
8980: 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45  encoding!=SQLITE
8990: 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20  _UTF8 ){.    rc 
89a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
89b0: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
89c0: 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49  ->p4.z, -1, SQLI
89d0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
89e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28  STATIC);.    if(
89f0: 20 72 63 20 29 7b 0a 20 20 20 20 20 20 61 73 73   rc ){.      ass
8a00: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8a10: 54 4f 4f 42 49 47 20 29 3b 20 2f 2a 20 54 68 69  TOOBIG ); /* Thi
8a20: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 70 6f  s is the only po
8a30: 73 73 69 62 6c 65 20 65 72 72 6f 72 20 68 65 72  ssible error her
8a40: 65 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74 6f 20  e */.      goto 
8a50: 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
8a60: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8a70: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
8a80: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
8a90: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
8aa0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
8ab0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
8ac0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
8ad0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8ae0: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8af0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
8b00: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
8b10: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8b20: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8b30: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8b40: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8b50: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8b60: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8b70: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
8b80: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
8b90: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
8ba0: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
8bb0: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
8bc0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
8bd0: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8be0: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8bf0: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8c00: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8c10: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8c20: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8c30: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8c40: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8c50: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8c60: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8c70: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
8c80: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
8c90: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
8ca0: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
8cb0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
8cc0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
8cd0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8ce0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8cf0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
8d00: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
8d10: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8d20: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
8d30: 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ero, then.** the
8d40: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8d50: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8d60: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8d70: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
8d80: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
8d90: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
8da0: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
8db0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
8dc0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
8dd0: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8de0: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8df0: 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  AST..*/.case OP_
8e00: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8e10: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8e20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8e30: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
8e40: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8e50: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
8e60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
8e70: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8e80: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
8e90: 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70  = pOp->p4.z;.  p
8ea0: 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31  Out->n = pOp->p1
8eb0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
8ec0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
8ed0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8ee0: 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  pOut);.#ifndef S
8ef0: 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e  QLITE_LIKE_DOESN
8f00: 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20  T_MATCH_BLOBS.  
8f10: 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
8f20: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
8f30: 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p3>0 );.    asse
8f40: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8f50: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
8f60: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
8f70: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
8f80: 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
8f90: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
8fa0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28  M_Int );.    if(
8fb0: 20 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75   pIn3->u.i ) pOu
8fc0: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
8fd0: 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  lob|MEM_Static|M
8fe0: 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e  EM_Term;.  }.#en
8ff0: 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  dif.  break;.}..
9000: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
9010: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
9020: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e  Synopsis:  r[P2.
9030: 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  .P3]=NULL.**.** 
9040: 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74  Write a NULL int
9050: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20  o registers P2. 
9060: 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74   If P3 greater t
9070: 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73  han P2, then als
9080: 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20  o write.** NULL 
9090: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
90a0: 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73   and every regis
90b0: 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50  ter in between P
90c0: 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33  2 and P3.  If P3
90d0: 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
90e0: 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50   P2 (typically P
90f0: 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20  3 is zero) then 
9100: 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32  only register P2
9110: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55   is.** set to NU
9120: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LL..**.** If the
9130: 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P1 value is non
9140: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f  -zero, then also
9150: 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65   set the MEM_Cle
9160: 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61  ared flag so tha
9170: 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73  t.** NULL values
9180: 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72   will not compar
9190: 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20  e equal even if 
91a0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
91b0: 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65   set on.** OP_Ne
91c0: 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61   or OP_Eq..*/.ca
91d0: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
91e0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
91f0: 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20  */.  int cnt;.  
9200: 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  u16 nullFlag;.  
9210: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9220: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9230: 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70   cnt = pOp->p3-p
9240: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
9250: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
9260: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9270: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  or) );.  pOut->f
9280: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20  lags = nullFlag 
9290: 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d  = pOp->p1 ? (MEM
92a0: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65  _Null|MEM_Cleare
92b0: 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  d) : MEM_Null;. 
92c0: 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b   while( cnt>0 ){
92d0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
92e0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
92f0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
9300: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
9310: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
9320: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
9330: 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74  ullFlag;.    cnt
9340: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
9350: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
9360: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
9370: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9380: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
9390: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
93a0: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
93b0: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
93c0: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
93d0: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
93e0: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
93f0: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
9400: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
9410: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
9420: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
9430: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
9440: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
9450: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
9460: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
9470: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
9480: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
9490: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
94a0: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
94b0: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
94c0: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
94d0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
94e0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
94f0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
9500: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9510: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9520: 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74  t->flags = (pOut
9530: 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c  ->flags|MEM_Null
9540: 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  )&~MEM_Undefined
9550: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9560: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
9570: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
9580: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
9590: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
95a0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
95b0: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
95c0: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
95d0: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
95e0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
95f0: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
9600: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
9610: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
9620: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
9630: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
9640: 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  TH );.  pOut = o
9650: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
9660: 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33   pOp);.  sqlite3
9670: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
9680: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
9690: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
96a0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
96b0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
96c0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
96d0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
96e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
96f0: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
9700: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9710: 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31  P2]=parameter(P1
9720: 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  ,P4).**.** Trans
9730: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
9740: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
9750: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9760: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
9770: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
9780: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
9790: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
97a0: 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  P4..** The P4 va
97b0: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
97c0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
97d0: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
97e0: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
97f0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
9800: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d  /* out2 */.  Mem
9810: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
9820: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
9830: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61  nsferred */..  a
9840: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
9850: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
9860: 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nVar );.  assert
9870: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
9880: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e  | pOp->p4.z==p->
9890: 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d  azVar[pOp->p1-1]
98a0: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
98b0: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
98c0: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
98d0: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
98e0: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
98f0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9900: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9910: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9920: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9930: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
9940: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
9950: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
9960: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9970: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9980: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
9990: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
99a0: 6f 70 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d  opsis:  r[P2@P3]
99b0: 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P3].**.** 
99c0: 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75  Move the P3 valu
99d0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
99e0: 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20  1..P1+P3-1 over 
99f0: 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
9a00: 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20  s P2..P2+P3-1.  
9a10: 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  Registers P1..P1
9a20: 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66  +P3-1 are.** lef
9a30: 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c  t holding a NULL
9a40: 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  .  It is an erro
9a50: 72 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72  r for register r
9a60: 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b  anges.** P1..P1+
9a70: 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b  P3-1 and P2..P2+
9a80: 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e  P3-1 to overlap.
9a90: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
9aa0: 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65  .** for P3 to be
9ab0: 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f   less than 1..*/
9ac0: 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b  .case OP_Move: {
9ad0: 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
9ae0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9af0: 20 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20   registers left 
9b00: 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74  to copy */.  int
9b10: 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   p1;          /*
9b20: 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70   Register to cop
9b30: 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20  y from */.  int 
9b40: 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p2;          /* 
9b50: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
9b60: 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f   to */..  n = pO
9b70: 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f  p->p3;.  p1 = pO
9b80: 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
9b90: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
9ba0: 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20   n>0 && p1>0 && 
9bb0: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
9bc0: 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32  ( p1+n<=p2 || p2
9bd0: 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e  +n<=p1 );..  pIn
9be0: 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20  1 = &aMem[p1];. 
9bf0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32   pOut = &aMem[p2
9c00: 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  ];.  do{.    ass
9c10: 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d  ert( pOut<=&aMem
9c20: 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  [(p->nMem+1 - p-
9c30: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
9c40: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d    assert( pIn1<=
9c50: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31  &aMem[(p->nMem+1
9c60: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20   - p->nCursor)] 
9c70: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
9c80: 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
9c90: 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  );.    memAboutT
9ca0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
9cb0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9cc0: 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70  eMemMove(pOut, p
9cd0: 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  In1);.#ifdef SQL
9ce0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66  ITE_DEBUG.    if
9cf0: 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ( pOut->pScopyFr
9d00: 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26  om>=&aMem[p1] &&
9d10: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9d20: 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20  m<pOut ){.      
9d30: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9d40: 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31   += pOp->p2 - p1
9d50: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
9d60: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
9d70: 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47  e(pOut);.    REG
9d80: 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b  ISTER_TRACE(p2++
9d90: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e  , pOut);.    pIn
9da0: 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  1++;.    pOut++;
9db0: 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29  .  }while( --n )
9dc0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
9dd0: 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31   Opcode: Copy P1
9de0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
9df0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b  nopsis: r[P2@P3+
9e00: 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a  1]=r[P1@P3+1].**
9e10: 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20  .** Make a copy 
9e20: 6f 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e  of registers P1.
9e30: 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69  .P1+P3 into regi
9e40: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e  sters P2..P2+P3.
9e50: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
9e60: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
9e70: 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65  deep copy of the
9e80: 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69   value.  A dupli
9e90: 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20  cate.** is made 
9ea0: 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  of any string or
9eb0: 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20   blob constant. 
9ec0: 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f   See also OP_SCo
9ed0: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  py..*/.case OP_C
9ee0: 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  opy: {.  int n;.
9ef0: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
9f00: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9f10: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
9f20: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
9f30: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
9f40: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c  !=pIn1 );.  whil
9f50: 65 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  e( 1 ){.    sqli
9f60: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
9f70: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
9f80: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
9f90: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9fa0: 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53  (pOut);.#ifdef S
9fb0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
9fc0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9fd0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20   = 0;.#endif.   
9fe0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9ff0: 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d  pOp->p2+pOp->p3-
a000: 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66  n, pOut);.    if
a010: 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65  ( (n--)==0 ) bre
a020: 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ak;.    pOut++;.
a030: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
a040: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a050: 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20  pcode: SCopy P1 
a060: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
a070: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
a080: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73  ].**.** Make a s
a090: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72  hallow copy of r
a0a0: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
a0b0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
a0c0: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
a0d0: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c  ion makes a shal
a0e0: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20  low copy of the 
a0f0: 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76  value.  If the v
a100: 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72  alue.** is a str
a110: 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65  ing or blob, the
a120: 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e  n the copy is on
a130: 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ly a pointer to 
a140: 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
a150: 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65  and hence if the
a160: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
a170: 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f  s so will the co
a180: 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66  py..** Worse, if
a190: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73   the original is
a1a0: 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68   deallocated, th
a1b0: 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69  e copy becomes i
a1c0: 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20  nvalid..** Thus 
a1d0: 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74  the program must
a1e0: 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20   guarantee that 
a1f0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c  the original wil
a200: 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20  l not change.** 
a210: 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74  during the lifet
a220: 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e  ime of the copy.
a230: 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f    Use OP_Copy to
a240: 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65   make a complete
a250: 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73  .** copy..*/.cas
a260: 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20  e OP_SCopy: {   
a270: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
a280: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
a290: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
a2a0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a2b0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
a2c0: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
a2d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
a2e0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
a2f0: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
a300: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
a310: 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74  DEBUG.  if( pOut
a320: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20  ->pScopyFrom==0 
a330: 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72  ) pOut->pScopyFr
a340: 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69  om = pIn1;.#endi
a350: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
a360: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79   Opcode: IntCopy
a370: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a380: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
a390: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  r[P1].**.** Tran
a3a0: 73 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72  sfer the integer
a3b0: 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72   value held in r
a3c0: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
a3d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
a3e0: 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  ** This is an op
a3f0: 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20  timized version 
a400: 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f  of SCopy that wo
a410: 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74  rks only for int
a420: 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a  eger.** values..
a430: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f  */.case OP_IntCo
a440: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
a450: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
a460: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
a470: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
a480: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
a490: 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70  M_Int)!=0 );.  p
a4a0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a4b0: 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
a4c0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
a4d0: 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b  Out, pIn1->u.i);
a4e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a4f0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
a500: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
a510: 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70   Synopsis:  outp
a520: 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a  ut=r[P1@P2].**.*
a530: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
a540: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
a550: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
a560: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
a570: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
a580: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
a590: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
a5a0: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
a5b0: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
a5c0: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
a5d0: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
a5e0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
a5f0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
a600: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
a610: 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28  to the r(P1)..r(
a620: 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20  P1+P2-1) values 
a630: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
a640: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
a650: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
a660: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
a670: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
a680: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
a690: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
a6a0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
a6b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a6c0: 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d  +pOp->p2<=(p->nM
a6d0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
a6e0: 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66  r)+1 );..#ifndef
a6f0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
a700: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
a710: 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67   /* Run the prog
a720: 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73  ress counter jus
a730: 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  t before returni
a740: 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ng..  */.  if( d
a750: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a  b->xProgress!=0.
a760: 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e     && nVmStep>=n
a770: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20  ProgressLimit.  
a780: 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73   && db->xProgres
a790: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
a7a0: 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  rg)!=0.  ){.    
a7b0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
a7c0: 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  RRUPT;.    goto 
a7d0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
a7e0: 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  or;.  }.#endif..
a7f0: 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61    /* If this sta
a800: 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61  tement has viola
a810: 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f  ted immediate fo
a820: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
a830: 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e  aints, do.  ** n
a840: 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ot return the nu
a850: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64  mber of rows mod
a860: 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f  ified. And do no
a870: 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74  t RELEASE the st
a880: 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61  atement.  ** tra
a890: 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65  nsaction. It nee
a8a0: 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
a8b0: 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20  back.  */.  if( 
a8c0: 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d  SQLITE_OK!=(rc =
a8d0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
a8e0: 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20  kFk(p, 0)) ){.  
a8f0: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c    assert( db->fl
a900: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
a910: 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65  Rows );.    asse
a920: 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a  rt( p->usesStmtJ
a930: 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f  ournal );.    go
a940: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
a950: 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
a960: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
a970: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
a980: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
a990: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
a9a0: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
a9b0: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
a9c0: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
a9d0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
a9e0: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
a9f0: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
aa00: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
aa10: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
aa20: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
aa30: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
aa40: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
aa50: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
aa60: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
aa70: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
aa80: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
aa90: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
aaa0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
aab0: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
aac0: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
aad0: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
aae0: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
aaf0: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
ab00: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
ab10: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
ab20: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
ab30: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
ab40: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
ab50: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
ab60: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
ab70: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
ab80: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
ab90: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
aba0: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
abb0: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
abc0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
abd0: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
abe0: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
abf0: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
ac00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
ac10: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
ac20: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
ac30: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
ac40: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
ac50: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
ac60: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
ac70: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
ac80: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
ac90: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
aca0: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
acb0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
acc0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
acd0: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
ace0: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
acf0: 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72  ELEASE);.  asser
ad00: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
ad10: 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69   );..  /* Invali
ad20: 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72  date all ephemer
ad30: 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61  al cursor row ca
ad40: 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63  ches */.  p->cac
ad50: 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68  heCtr = (p->cach
ad60: 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20  eCtr + 2)|1;..  
ad70: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
ad80: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
ad90: 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20  current row are 
ada0: 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a  \000 terminated.
adb0: 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e    ** and have an
adc0: 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20   assigned type. 
add0: 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65   The results are
ade0: 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65   de-ephemeralize
adf0: 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65  d as.  ** a side
ae00: 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20   effect..  */.  
ae10: 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c  pMem = p->pResul
ae20: 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  tSet = &aMem[pOp
ae30: 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p1];.  for(i=0
ae40: 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b  ; i<pOp->p2; i++
ae50: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
ae60: 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b  emIsValid(&pMem[
ae70: 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68  i]) );.    Deeph
ae80: 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b  emeralize(&pMem[
ae90: 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  i]);.    assert(
aea0: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
aeb0: 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a  & MEM_Ephem)==0.
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28              || (
aed0: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
aee0: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
aef0: 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  b))==0 );.    sq
af00: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54  lite3VdbeMemNulT
af10: 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69  erminate(&pMem[i
af20: 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  ]);.    REGISTER
af30: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69  _TRACE(pOp->p1+i
af40: 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d  , &pMem[i]);.  }
af50: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f  .  if( db->mallo
af60: 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e  cFailed ) goto n
af70: 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74  o_mem;..  /* Ret
af80: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
af90: 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69   */.  p->pc = (i
afa0: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b  nt)(pOp - aOp) +
afb0: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
afc0: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
afd0: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
afe0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
aff0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b000: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b010: 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]+r[P1].**.*
b020: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
b030: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
b040: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
b050: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
b060: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
b070: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b080: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b090: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
b0a0: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
b0b0: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
b0c0: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
b0d0: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
b0e0: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
b0f0: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
b100: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
b110: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
b120: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
b130: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
b140: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
b150: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
b160: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
b170: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
b180: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
b190: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
b1a0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
b1b0: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
b1c0: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
b1d0: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
b1e0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
b1f0: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b200: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
b210: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
b220: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
b230: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
b240: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b250: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
b260: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
b270: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
b280: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
b290: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
b2a0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
b2b0: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
b2c0: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
b2d0: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
b2e0: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
b2f0: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
b300: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
b310: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
b320: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
b330: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
b340: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
b350: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
b360: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
b370: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
b380: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
b390: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
b3a0: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
b3b0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
b3c0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b3d0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
b3e0: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
b3f0: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
b400: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
b410: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
b420: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
b430: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
b440: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
b450: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d   pOut->z[nByte]=
b460: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
b470: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
b480: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
b490: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
b4a0: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
b4b0: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
b4c0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
b4d0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
b4e0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b4f0: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
b500: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b510: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b520: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
b530: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
b540: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
b550: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b560: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b570: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b580: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b590: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b5a0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b5b0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b5c0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b5d0: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
b5e0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b5f0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  s:  r[P3]=r[P1]*
b600: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
b610: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
b620: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b630: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
b640: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b650: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b660: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b670: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b680: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b690: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b6a0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b6b0: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
b6c0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b6d0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b6e0: 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  2]-r[P1].**.** S
b6f0: 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75  ubtract the valu
b700: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b710: 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20   from the value 
b720: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
b730: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
b740: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b750: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
b760: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
b770: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
b780: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
b790: 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50  ode: Divide P1 P
b7a0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b7b0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
b7c0: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
b7d0: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
b7e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
b7f0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
b800: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b810: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b820: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b830: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
b840: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
b850: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
b860: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
b870: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
b880: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b890: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
b8a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b8b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
b8c0: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
b8d0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b8e0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  s:  r[P3]=r[P2]%
b8f0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
b900: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
b910: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
b920: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
b930: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
b940: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
b950: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b960: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
b970: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b980: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b990: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
b9a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
b9b0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b9c0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b9d0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b9e0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ba00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
ba10: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
ba20: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
ba30: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
ba40: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ba50: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
ba60: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ba70: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
ba80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ba90: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
baa0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bab0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bad0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
bae0: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
baf0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
bb00: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
bb10: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bb20: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
bb30: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
bb40: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
bb50: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
bb60: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
bb70: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
bb80: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
bb90: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
bba0: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
bbb0: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
bbc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
bbd0: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
bbe0: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
bbf0: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
bc00: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
bc10: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
bc20: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
bc30: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bc40: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
bc50: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
bc60: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
bc70: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
bc80: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bc90: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
bca0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
bcb0: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bcc0: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
bcd0: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
bce0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
bcf0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
bd00: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
bd10: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
bd20: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
bd30: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
bd40: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
bd50: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
bd60: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
bd70: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
bd80: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
bd90: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
bda0: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
bdb0: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
bdc0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bdd0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
bde0: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
bdf0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
be00: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
be10: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
be20: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
be30: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
be40: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
be50: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
be60: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
be70: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
be80: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
be90: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
bea0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
beb0: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
bec0: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
bed0: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
bee0: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
bef0: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
bf00: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
bf10: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
bf20: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
bf30: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
bf40: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
bf50: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
bf60: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
bf70: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bf80: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
bf90: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
bfa0: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
bfb0: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
bfc0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
bfd0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
bfe0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
bff0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
c000: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c010: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c020: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c030: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c040: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c050: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
c060: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c070: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
c080: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
c090: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c0a0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c0b0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
c0c0: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
c0d0: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
c0e0: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
c0f0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
c100: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
c110: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
c120: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c130: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c140: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c150: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
c160: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c170: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c180: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
c190: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c1a0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c1b0: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
c1c0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c1d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
c1e0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
c1f0: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
c200: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
c210: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c220: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
c230: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
c240: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
c250: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c260: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
c270: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
c280: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c290: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
c2a0: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
c2b0: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
c2c0: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
c2d0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c2e0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c2f0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c300: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c310: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c320: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
c330: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
c340: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c350: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
c360: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c370: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
c380: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
c390: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c3a0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c3b0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
c3c0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
c3d0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
c3e0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c3f0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
c400: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
c410: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c420: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c430: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
c440: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
c450: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
c460: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
c470: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
c480: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
c490: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
c4a0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
c4b0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c4c0: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
c4d0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
c4e0: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
c4f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c500: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
c510: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
c520: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
c530: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
c540: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
c550: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c560: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
c570: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
c580: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
c590: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
c5a0: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
c5b0: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
c5c0: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
c5d0: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
c5e0: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
c5f0: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
c600: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
c610: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
c620: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
c630: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
c640: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
c650: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
c660: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
c670: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
c680: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
c690: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
c6a0: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c6b0: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c6c0: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c6d0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c6e0: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c6f0: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c700: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c710: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c720: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c730: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c740: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c750: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c760: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c770: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c780: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c790: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c7a0: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c7b0: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c7c0: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c7d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c7e0: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c7f0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c800: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c810: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c820: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c830: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c840: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
c850: 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20 50 33  nction0 P1 P2 P3
c860: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c870: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c880: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c890: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c8a0: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c8b0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
c8c0: 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  Def object that.
c8d0: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
c8e0: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
c8f0: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
c900: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
c910: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
c920: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
c930: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c940: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
c950: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
c960: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c970: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c980: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c990: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c9a0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c9b0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c9c0: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c9d0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c9e0: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c9f0: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
ca00: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
ca10: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
ca20: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
ca30: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
ca40: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
ca50: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
ca60: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
ca70: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
ca80: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
ca90: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
caa0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
cab0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
cac0: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
cad0: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
cae0: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
caf0: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
cb00: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
cb10: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
cb20: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63  * See also: Func
cb30: 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c 20 41  tion, AggStep, A
cb40: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70  ggFinal.*/./* Op
cb50: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
cb60: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
cb70: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
cb80: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
cb90: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
cba0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
cbb0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
cbc0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
cbd0: 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  ext object that.
cbe0: 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  ** contains a po
cbf0: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e  inter to the fun
cc00: 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29  ction to be run)
cc10: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
cc20: 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d  ts taken.** from
cc30: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
cc40: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
cc50: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
cc60: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
cc70: 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ed.** in registe
cc80: 72 20 50 33 2e 20 20 52 65 67 69 73 74 65 72 20  r P3.  Register 
cc90: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
cca0: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
ccb0: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
ccc0: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
ccd0: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
cce0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
ccf0: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
cd00: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
cd10: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
cd20: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
cd30: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
cd40: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
cd50: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
cd60: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
cd70: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
cd80: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
cd90: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
cda0: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
cdb0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
cdc0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
cdd0: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
cde0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
cdf0: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
ce00: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
ce10: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
ce20: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
ce30: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
ce40: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66  ode..**.** SQL f
ce50: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 69  unctions are ini
ce60: 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
ce70: 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77 69 74  OP_Function0 wit
ce80: 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  h P4 pointing.**
ce90: 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62   to a FuncDef ob
cea0: 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20 66 69  ject.  But on fi
ceb0: 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20  rst evaluation, 
cec0: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 20 69  the P4 operand i
ced0: 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  s.** automatical
cee0: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  ly converted int
cef0: 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
cf00: 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  text object and 
cf10: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a  the operation.**
cf20: 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68 69 73   changed to this
cf30: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63   OP_Function opc
cf40: 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ode.  In this wa
cf50: 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
cf60: 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
cf70: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cf80: 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20 6f 6e  object occurs on
cf90: 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65 72 20  ly once, rather 
cfa0: 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61  than once for ea
cfb0: 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e  ch.** evaluation
cfc0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
cfd0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
cfe0: 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67  : Function0, Agg
cff0: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
d000: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
d010: 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  on0: {.  int n;.
d020: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
d030: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
d040: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d050: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
d060: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
d070: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
d080: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
d090: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
d0a0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
d0b0: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
d0c0: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
d0d0: 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
d0e0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
d0f0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
d100: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
d110: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
d120: 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
d130: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
d140: 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
d150: 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73  *pCtx) + (n-1)*s
d160: 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
d170: 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43  lue*));.  if( pC
d180: 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
d190: 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  mem;.  pCtx->pOu
d1a0: 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  t = 0;.  pCtx->p
d1b0: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
d1c0: 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
d1d0: 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
d1e0: 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
d1f0: 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
d200: 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70  >argc = n;.  pOp
d210: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55  ->p4type = P4_FU
d220: 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34  NCCTX;.  pOp->p4
d230: 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20  .pCtx = pCtx;.  
d240: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
d250: 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20  _Function;.  /* 
d260: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
d270: 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f  o OP_Function */
d280: 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  .}.case OP_Funct
d290: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
d2a0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
d2b0: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
d2c0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d2d0: 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20  =P4_FUNCCTX );. 
d2e0: 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e   pCtx = pOp->p4.
d2f0: 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  pCtx;..  /* If t
d300: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
d310: 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
d320: 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
d330: 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
d340: 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
d350: 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
d360: 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
d370: 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
d380: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
d390: 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
d3a0: 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
d3b0: 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
d3c0: 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
d3d0: 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
d3e0: 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
d3f0: 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
d400: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
d410: 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ect */.  pOut = 
d420: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
d430: 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74    if( pCtx->pOut
d440: 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20 20 20   != pOut ){.    
d450: 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75  pCtx->pOut = pOu
d460: 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74  t;.    for(i=pCt
d470: 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b  x->argc-1; i>=0;
d480: 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76   i--) pCtx->argv
d490: 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  [i] = &aMem[pOp-
d4a0: 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d  >p2+i];.  }..  m
d4b0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d4c0: 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  p, pCtx->pOut);.
d4d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
d4e0: 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  BUG.  for(i=0; i
d4f0: 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b  <pCtx->argc; i++
d500: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
d510: 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e  emIsValid(pCtx->
d520: 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20  argv[i]) );.    
d530: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
d540: 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e  Op->p2+i, pCtx->
d550: 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65  argv[i]);.  }.#e
d560: 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74 54 79 70  ndif.  MemSetTyp
d570: 65 46 6c 61 67 28 70 43 74 78 2d 3e 70 4f 75 74  eFlag(pCtx->pOut
d580: 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
d590: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d5a0: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74   = 0;.  db->last
d5b0: 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
d5c0: 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70 46 75  d;.  (*pCtx->pFu
d5d0: 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78  nc->xSFunc)(pCtx
d5e0: 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20 70 43  , pCtx->argc, pC
d5f0: 74 78 2d 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50  tx->argv);/* IMP
d600: 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
d610: 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  */.  lastRowid =
d620: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20   db->lastRowid; 
d630: 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72 6f 77   /* Remember row
d640: 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  id changes made 
d650: 62 79 20 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20  by xSFunc */..  
d660: 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63 74 69  /* If the functi
d670: 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65  on returned an e
d680: 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65  rror, throw an e
d690: 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66  xception */.  if
d6a0: 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72  ( pCtx->fErrorOr
d6b0: 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70  Aux ){.    if( p
d6c0: 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a  Ctx->isError ){.
d6d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d6e0: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
d6f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
d700: 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b  xt(pCtx->pOut));
d710: 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78  .      rc = pCtx
d720: 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d  ->isError;.    }
d730: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d740: 44 65 6c 65 74 65 41 75 78 44 61 74 61 28 64 62  DeleteAuxData(db
d750: 2c 20 26 70 2d 3e 70 41 75 78 44 61 74 61 2c 20  , &p->pAuxData, 
d760: 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e  pCtx->iOp, pOp->
d770: 70 31 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  p1);.    if( rc 
d780: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
d790: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
d7a0: 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65    /* Copy the re
d7b0: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
d7c0: 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tion into regist
d7d0: 65 72 20 50 33 20 2a 2f 0a 20 20 69 66 28 20 70  er P3 */.  if( p
d7e0: 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Out->flags & (ME
d7f0: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20  M_Str|MEM_Blob) 
d800: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d810: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
d820: 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63  (pCtx->pOut, enc
d830: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20  oding);.    if( 
d840: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
d850: 6f 42 69 67 28 70 43 74 78 2d 3e 70 4f 75 74 29  oBig(pCtx->pOut)
d860: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
d870: 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54 45 52  .  }..  REGISTER
d880: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
d890: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55  pCtx->pOut);.  U
d8a0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
d8b0: 5a 45 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  ZE(pCtx->pOut);.
d8c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
d8d0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
d8e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d8f0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
d900: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
d910: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d920: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
d930: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
d940: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
d950: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
d960: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
d970: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
d980: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
d990: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
d9a0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
d9b0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
d9c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d9d0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
d9e0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d9f0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
da00: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
da10: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
da20: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
da30: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
da40: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
da50: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
da60: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
da70: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
da80: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
da90: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
daa0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
dab0: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
dac0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
dad0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
dae0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
daf0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
db00: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
db10: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
db20: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
db30: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
db40: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
db50: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
db60: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
db70: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
db80: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
db90: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
dba0: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
dbb0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
dbc0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
dbd0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
dbe0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
dbf0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
dc00: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
dc10: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
dc20: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
dc30: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
dc40: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
dc50: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
dc60: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
dc70: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
dc80: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
dc90: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
dca0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
dcb0: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
dcc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dcd0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
dce0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
dcf0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dd20: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
dd30: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
dd40: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
dd50: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dd60: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
dd70: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
dd80: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
dd90: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
dda0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
ddb0: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
ddc0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
ddd0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
dde0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
ddf0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
de00: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
de10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
de20: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
de30: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
de40: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
de50: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
de60: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
de70: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
de80: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
de90: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
dea0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
deb0: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
dec0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
ded0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
dee0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
def0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
df00: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
df10: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
df20: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
df30: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
df40: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
df50: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
df60: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
df70: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
df80: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
df90: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
dfa0: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
dfb0: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
dfc0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
dfd0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
dfe0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
dff0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
e000: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
e010: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
e020: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
e030: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
e040: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
e050: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
e060: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
e070: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
e080: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
e090: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
e0a0: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
e0b0: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
e0c0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
e0d0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
e0e0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
e0f0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
e100: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
e110: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
e120: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
e130: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
e140: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
e150: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
e160: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
e170: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
e180: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
e190: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
e1a0: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
e1b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
e1c0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
e1d0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
e1e0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
e1f0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
e200: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
e210: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e220: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
e230: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
e240: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
e250: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
e260: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
e270: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
e280: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e290: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
e2a0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
e2b0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
e2c0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
e2d0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
e2e0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
e2f0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
e300: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
e310: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
e320: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
e330: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
e340: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
e350: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
e360: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
e370: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
e380: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
e390: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e3a0: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
e3b0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
e3c0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
e3d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e3e0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
e3f0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
e400: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
e410: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
e420: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
e430: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
e440: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
e450: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
e460: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
e470: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
e480: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
e490: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
e4a0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
e4b0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
e4c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e4d0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
e4e0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e4f0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
e500: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e510: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
e520: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
e530: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
e540: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
e550: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
e560: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
e570: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
e580: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
e590: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e5a0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
e5b0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
e5c0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
e5d0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
e5e0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
e5f0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
e600: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e610: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
e620: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
e630: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
e640: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
e650: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
e660: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
e670: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e680: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
e690: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
e6a0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
e6b0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
e6c0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
e6d0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
e6e0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
e6f0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
e700: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
e710: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
e720: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
e730: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
e740: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
e750: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
e760: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
e770: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
e780: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
e790: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
e7a0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
e7b0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
e7c0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
e7d0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
e7e0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
e7f0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
e800: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
e810: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e820: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
e830: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e840: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
e850: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
e860: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
e870: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
e880: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e890: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
e8a0: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
e8b0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
e8c0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
e8d0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
e8e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e8f0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
e900: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
e910: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
e920: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
e930: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
e940: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
e950: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
e960: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
e970: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
e980: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
e990: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
e9a0: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
e9b0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
e9c0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
e9d0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
e9e0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
e9f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
ea00: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
ea10: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
ea20: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
ea30: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
ea40: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
ea50: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
ea60: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
ea70: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
ea80: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
ea90: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
eaa0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a  ITE_AFF_BLOB );.
eab0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
eac0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
ead0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
eae0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
eaf0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
eb00: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
eb10: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
eb20: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
eb30: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
eb40: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
eb50: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
eb60: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
eb70: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
eb80: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
eb90: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
eba0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
ebb0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
ebc0: 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72  E(pIn1);.  if( r
ebd0: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
ebe0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
ebf0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
ec00: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
ec10: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
ec20: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
ec30: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
ec40: 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20   if r[P1]<r[P3] 
ec50: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f  goto P2.**.** Co
ec60: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
ec70: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ec80: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
ec90: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
eca0: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
ecb0: 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20  ess P2.  .**.** 
ecc0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
ecd0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
ece0: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
ecf0: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
ed00: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
ed10: 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
ed20: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
ed30: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
ed40: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
ed50: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
ed60: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
ed70: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
ed80: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
ed90: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
eda0: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
edb0: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
edc0: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
edd0: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
ede0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
edf0: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
ee00: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
ee10: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
ee20: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
ee30: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
ee40: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
ee50: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
ee60: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
ee70: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
ee80: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
ee90: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
eea0: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
eeb0: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
eec0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
eed0: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
eee0: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
eef0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
ef00: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
ef10: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
ef20: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
ef30: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
ef40: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
ef50: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
ef60: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
ef70: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
ef80: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
ef90: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
efa0: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
efb0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
efc0: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
efd0: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
efe0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
eff0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
f000: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
f010: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
f020: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
f030: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
f040: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
f050: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
f060: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
f070: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
f080: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
f090: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
f0a0: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
f0b0: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
f0c0: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
f0d0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
f0e0: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
f0f0: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
f100: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
f110: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
f120: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
f130: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
f140: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
f150: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
f160: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
f170: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
f180: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
f190: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
f1a0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   If the SQLITE_S
f1b0: 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20 50 35  TOREP2 bit of P5
f1c0: 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f   is set, then do
f1d0: 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74   not jump.  Inst
f1e0: 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20  ead,.** store a 
f1f0: 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28  boolean result (
f200: 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20  either 0, or 1, 
f210: 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69  or NULL) in regi
f220: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
f230: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  f the SQLITE_NUL
f240: 4c 45 51 20 62 69 74 20 69 73 20 73 65 74 20 69  LEQ bit is set i
f250: 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20  n P5, then NULL 
f260: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69  values are consi
f270: 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74  dered.** equal t
f280: 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70  o one another, p
f290: 72 6f 76 69 64 65 64 20 74 68 61 74 20 74 68 65  rovided that the
f2a0: 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68  y do not have th
f2b0: 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a  eir MEM_Cleared.
f2c0: 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f  ** bit set..*/./
f2d0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
f2e0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f2f0: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f300: 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32  ]!=r[P3] goto P2
f310: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
f320: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
f330: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
f340: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
f350: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
f360: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
f370: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
f380: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
f390: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f3a0: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
f3b0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f3c0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  n..**.** If SQLI
f3d0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
f3e0: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
f3f0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
f400: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
f410: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
f420: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
f430: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
f440: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
f450: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
f460: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
f470: 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20  rison is false. 
f480: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
f490: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
f4a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 72  the result is tr
f4b0: 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  ue..** If neithe
f4c0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f4d0: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
f4e0: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
f4f0: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
f500: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
f510: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
f520: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a  d from P5..*/./*
f530: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
f540: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f550: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
f560: 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ==r[P3] goto P2.
f570: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f580: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f590: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f5a0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f5b0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f5c0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
f5d0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f5e0: 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53   are equal..** S
f5f0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f600: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f610: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
f620: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
f630: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
f640: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f650: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
f660: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
f670: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
f680: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
f690: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
f6a0: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
f6b0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
f6c0: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
f6d0: 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74  is true.  If eit
f6e0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f6f0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
f700: 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  ult is false..**
f710: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
f720: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
f730: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
f740: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
f750: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
f760: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
f770: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
f780: 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P5..*/./* Opcod
f790: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
f7a0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f7b0: 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33  : if r[P1]<=r[P3
f7c0: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f7d0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f7e0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f7f0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f800: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f810: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f820: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f830: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
f840: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
f850: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
f860: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
f870: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
f880: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
f890: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
f8a0: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
f8b0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f8c0: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72  psis: if r[P1]>r
f8d0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f8e0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f8f0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f900: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f910: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f920: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f930: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f940: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
f950: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
f960: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f970: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f980: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f990: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f9a0: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
f9b0: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
f9c0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f9d0: 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20  if r[P1]>=r[P3] 
f9e0: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
f9f0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
fa00: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
fa10: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
fa20: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fa30: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
fa40: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
fa50: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
fa60: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
fa70: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
fa80: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
fa90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
faa0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
fab0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
fac0: 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
fad0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fae0: 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
faf0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
fb00: 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
fb10: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fb20: 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
fb30: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
fb40: 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
fb50: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
fb60: 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
fb70: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
fb80: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
fb90: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
fba0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
fbb0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fbd0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
fbe0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
fbf0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fc10: 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
fc20: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
fc30: 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
fc40: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
fc50: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
fc60: 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
fc70: 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
fc80: 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
fc90: 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
fca0: 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
fcb0: 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
fcc0: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
fcd0: 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
fce0: 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
fcf0: 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
fd00: 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
fd10: 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
fd20: 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
fd30: 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
fd40: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
fd50: 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
fd60: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
fd70: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
fd80: 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
fd90: 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
fda0: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
fdb0: 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
fdc0: 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
fdd0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
fde0: 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
fdf0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
fe00: 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
fe10: 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
fe20: 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
fe30: 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
fe40: 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
fe50: 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
fe60: 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
fe70: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
fe80: 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
fe90: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
fea0: 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
feb0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
fec0: 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
fed0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
fee0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
fef0: 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
ff00: 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61  OP_Ne );.      a
ff10: 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26  ssert( (flags1 &
ff20: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30   MEM_Cleared)==0
ff30: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
ff40: 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  ( (pOp->p5 & SQL
ff50: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d  ITE_JUMPIFNULL)=
ff60: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
ff70: 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c  (flags1&MEM_Null
ff80: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
ff90: 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
ffa0: 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
ffb0: 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
ffc0: 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
ffd0: 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
ffe0: 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20   /* Results are 
fff0: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
10000 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
10010 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c  s = 1;  /* Resul
10020 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ts are not equal
10030 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
10040 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
10050 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
10060 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
10070 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
10080 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
10090 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
100a0 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
100b0 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
100c0 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
100d0 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
100e0 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
100f0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
10100 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10110 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
10120 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
10130 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10140 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
10150 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
10160 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65  );.        MemSe
10170 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
10180 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20  MEM_Null);.     
10190 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
101a0 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
101b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
101c0 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
101d0 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20  hTaken(2,3);.   
101e0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
101f0 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
10200 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20  NULL ){.        
10210 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
10220 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
10230 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
10240 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
10250 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20  .    /* Neither 
10260 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
10270 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f    Do a compariso
10280 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69  n. */.    affini
10290 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53  ty = pOp->p5 & S
102a0 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a  QLITE_AFF_MASK;.
102b0 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79      if( affinity
102c0 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
102d0 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66  ERIC ){.      if
102e0 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67  ( (flags1 | flag
102f0 73 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  s3)&MEM_Str ){. 
10300 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
10310 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
10320 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
10330 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
10340 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
10350 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
10360 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ,0);.        }. 
10370 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
10380 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
10390 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
103a0 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
103b0 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
103c0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
103d0 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ,0);.        }. 
103e0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
103f0 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
10400 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
10410 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  {.      if( (fla
10420 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  gs1 & MEM_Str)==
10430 30 20 26 26 20 28 66 6c 61 67 73 31 20 26 20 28  0 && (flags1 & (
10440 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
10450 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ))!=0 ){.       
10460 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10470 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
10480 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
10490 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
104a0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a  s & MEM_Real );.
104b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
104c0 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
104d0 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20  pIn1, encoding, 
104e0 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  1);.        test
104f0 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45  case( (flags1&ME
10500 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d  M_Dyn) != (pIn1-
10510 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20  >flags&MEM_Dyn) 
10520 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73  );.        flags
10530 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  1 = (pIn1->flags
10540 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b   & ~MEM_TypeMask
10550 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45  ) | (flags1 & ME
10560 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20  M_TypeMask);.   
10570 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
10580 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72  flags3 & MEM_Str
10590 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20  )==0 && (flags3 
105a0 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
105b0 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
105c0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
105d0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
105e0 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
105f0 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
10600 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
10610 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
10620 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
10630 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e  fy(pIn3, encodin
10640 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74  g, 1);.        t
10650 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 33  estcase( (flags3
10660 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49  &MEM_Dyn) != (pI
10670 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79  n3->flags&MEM_Dy
10680 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c  n) );.        fl
10690 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c  ags3 = (pIn3->fl
106a0 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d  ags & ~MEM_TypeM
106b0 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26  ask) | (flags3 &
106c0 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a   MEM_TypeMask);.
106d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
106e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
106f0 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
10700 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
10710 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  ll==0 );.    if(
10720 20 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 5a 65   flags1 & MEM_Ze
10730 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
10740 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
10750 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20  Blob(pIn1);.    
10760 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d    flags1 &= ~MEM
10770 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20  _Zero;.    }.   
10780 20 69 66 28 20 66 6c 61 67 73 33 20 26 20 4d 45   if( flags3 & ME
10790 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
107a0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
107b0 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a  pandBlob(pIn3);.
107c0 20 20 20 20 20 20 66 6c 61 67 73 33 20 26 3d 20        flags3 &= 
107d0 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d  ~MEM_Zero;.    }
107e0 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
107f0 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
10800 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
10810 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73  .pColl);.  }.  s
10820 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
10830 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f  de ){.    case O
10840 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Eq:    res = r
10850 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es==0;     break
10860 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65  ;.    case OP_Ne
10870 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21 3d  :    res = res!=
10880 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
10890 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
108a0 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20 20   res = res<0;   
108b0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
108c0 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73  se OP_Le:    res
108d0 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62   = res<=0;     b
108e0 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
108f0 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Gt:    res = r
10900 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es>0;      break
10910 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
10920 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e 3d       res = res>=
10930 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
10940 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79  }..  /* Undo any
10950 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
10960 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
10970 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
10980 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73  gisters. */.  as
10990 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
109a0 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
109b0 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44   (flags1 & MEM_D
109c0 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  yn) );.  pIn1->f
109d0 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20  lags = flags1;. 
109e0 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
109f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
10a00 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45   == (flags3 & ME
10a10 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33  M_Dyn) );.  pIn3
10a20 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33  ->flags = flags3
10a30 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  ;..  if( pOp->p5
10a40 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
10a50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
10a60 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10a70 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
10a80 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
10a90 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10aa0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
10ab0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
10ac0 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49 53  = res;.    REGIS
10ad0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
10ae0 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  2, pOut);.  }els
10af0 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
10b00 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28  hTaken(res!=0, (
10b10 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10b20 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20  _NULLEQ)?2:3);. 
10b30 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
10b40 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
10b50 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  _p2;.    }.  }. 
10b60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
10b70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
10b80 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
10b90 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
10ba0 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
10bb0 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
10bc0 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
10bd0 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
10be0 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
10bf0 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
10c00 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
10c10 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
10c20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
10c30 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
10c40 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
10c50 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
10c60 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
10c70 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
10c80 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
10c90 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
10ca0 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
10cb0 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
10cc0 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
10cd0 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
10ce0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
10cf0 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
10d00 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
10d10 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
10d20 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
10d30 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
10d40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10d50 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
10d60 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
10d70 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
10d80 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
10d90 3e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20 62 72  >p4.ai + 1;.  br
10da0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10db0 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
10dc0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
10dd0 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20  opsis: r[P1@P3] 
10de0 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  <-> r[P2@P3].**.
10df0 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
10e00 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
10e10 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
10e20 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
10e30 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
10e40 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
10e50 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
10e60 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
10e70 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
10e80 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
10e90 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
10ea0 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
10eb0 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
10ec0 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
10ed0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
10ee0 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
10ef0 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
10f00 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
10f10 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
10f20 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
10f30 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
10f40 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
10f50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
10f60 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
10f70 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
10f80 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
10f90 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
10fa0 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
10fb0 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
10fc0 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
10fd0 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
10fe0 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
10ff0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
11000 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
11010 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
11020 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
11030 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
11040 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
11050 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
11060 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
11070 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
11080 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
11090 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
110a0 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
110b0 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
110c0 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
110d0 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
110e0 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
110f0 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
11100 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
11110 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
11120 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
11130 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
11140 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
11150 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
11160 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
11170 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
11180 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
11190 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
111a0 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
111b0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
111c0 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
111d0 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
111e0 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
111f0 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
11200 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20  )==0 ) aPermute 
11210 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  = 0;.  n = pOp->
11220 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
11230 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
11240 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
11250 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
11260 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
11270 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
11280 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
11290 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
112a0 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
112b0 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
112c0 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
112d0 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
112e0 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
112f0 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
11300 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11310 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
11320 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11330 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
11340 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
11350 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
11360 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11370 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11380 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11390 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p1+n<=(p->nMem+1
113a0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
113b0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
113c0 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
113d0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
113e0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
113f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11400 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
11410 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
11420 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
11430 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
11440 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
11450 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11460 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
11470 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
11480 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
11490 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
114a0 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
114b0 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
114c0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
114d0 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
114e0 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
114f0 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
11500 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
11510 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
11520 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
11530 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
11540 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
11550 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
11560 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
11570 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
11580 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
11590 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
115a0 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
115b0 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
115c0 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
115d0 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
115e0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
115f0 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
11600 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11610 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
11620 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
11630 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
11640 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
11650 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
11660 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
11670 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
11680 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
11690 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
116a0 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
116b0 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
116c0 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
116d0 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
116e0 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
116f0 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
11700 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
11710 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
11720 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
11730 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11740 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70  hTaken(0,3); pOp
11750 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
11760 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
11770 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
11780 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
11790 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d  aken(1,3); pOp =
117a0 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
117b0 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
117c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
117d0 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,3); pOp = &aO
117e0 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
117f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11800 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
11810 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
11820 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
11830 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
11840 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
11850 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
11860 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
11870 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
11880 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
11890 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
118a0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
118b0 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
118c0 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
118d0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
118e0 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
118f0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
11900 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
11910 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
11920 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
11930 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
11940 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
11950 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
11960 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
11970 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
11980 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
11990 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
119a0 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
119b0 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
119c0 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
119d0 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
119e0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
119f0 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
11a00 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
11a10 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
11a20 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
11a30 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
11a40 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
11a50 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
11a60 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
11a70 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
11a80 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
11a90 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
11aa0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11ab0 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
11ac0 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
11ad0 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
11ae0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
11af0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
11b00 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
11b10 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
11b20 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
11b30 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
11b40 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
11b50 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
11b60 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
11b70 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
11b80 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
11b90 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
11ba0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
11bb0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
11bc0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11bd0 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
11be0 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
11bf0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
11c00 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
11c10 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
11c20 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
11c30 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
11c40 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
11c50 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
11c60 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
11c70 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
11c80 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
11c90 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11ca0 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
11cb0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
11cc0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
11cd0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
11ce0 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
11cf0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
11d00 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
11d10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
11d20 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
11d30 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
11d40 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
11d50 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
11d60 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
11d70 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
11d80 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
11d90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
11da0 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
11db0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
11dc0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
11dd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
11de0 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
11df0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
11e00 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
11e10 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11e20 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
11e30 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
11e40 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
11e50 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
11e60 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
11e70 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
11e80 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
11e90 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
11ea0 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
11eb0 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
11ec0 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
11ed0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11ee0 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
11ef0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
11f00 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
11f10 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
11f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
11f30 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
11f40 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
11f50 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
11f60 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
11f70 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
11f80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
11f90 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
11fa0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
11fb0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
11fc0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
11fd0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
11fe0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71   pOut->u.i = !sq
11ff0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
12000 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
12010 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12020 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
12030 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12040 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
12050 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12060 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12070 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12080 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12090 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
120a0 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
120b0 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
120c0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
120d0 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
120e0 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
120f0 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12100 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12120 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12130 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12140 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12150 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12160 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12170 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12180 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12190 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
121a0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
121b0 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
121c0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
121d0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
121e0 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
121f0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12200 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12210 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12220 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  P2 * * *.**.** C
12230 68 65 63 6b 20 74 68 65 20 22 6f 6e 63 65 22 20  heck the "once" 
12240 66 6c 61 67 20 6e 75 6d 62 65 72 20 50 31 2e 20  flag number P1. 
12250 49 66 20 69 74 20 69 73 20 73 65 74 2c 20 6a 75  If it is set, ju
12260 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
12270 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65 72 77  n P2. .** Otherw
12280 69 73 65 2c 20 73 65 74 20 74 68 65 20 66 6c 61  ise, set the fla
12290 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  g and fall throu
122a0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
122b0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49  nstruction..** I
122c0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
122d0 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73 65  his opcode cause
122e0 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20  s all following 
122f0 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72 6f 75  opcodes up throu
12300 67 68 20 50 32 0a 2a 2a 20 28 62 75 74 20 6e 6f  gh P2.** (but no
12310 74 20 69 6e 63 6c 75 64 69 6e 67 20 50 32 29 20  t including P2) 
12320 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e 63 65  to run just once
12330 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69 70 70   and to be skipp
12340 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
12350 0a 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f 75 67  .** times throug
12360 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a  h the loop..**.*
12370 2a 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66 6c 61  * All "once" fla
12380 67 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  gs are initially
12390 20 63 6c 65 61 72 65 64 20 77 68 65 6e 65 76 65   cleared wheneve
123a0 72 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  r a prepared sta
123b0 74 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73 74 20  tement.** first 
123c0 62 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a  begins to run..*
123d0 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20  /.case OP_Once: 
123e0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
123f0 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
12400 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f  t( pOp->p1<p->nO
12410 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62  nceFlag );.  Vdb
12420 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
12430 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
12440 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  1]!=0, 2);.  if(
12450 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f   p->aOnceFlag[pO
12460 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20 67 6f  p->p1] ){.    go
12470 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
12480 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61   }else{.    p->a
12490 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31  OnceFlag[pOp->p1
124a0 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65  ] = 1;.  }.  bre
124b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
124c0 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a 20  : If P1 P2 P3 * 
124d0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
124e0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
124f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
12500 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61 6c  s true.  The val
12510 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  ue.** is conside
12520 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20 69  red true if it i
12530 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f  s numeric and no
12540 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  n-zero.  If the 
12550 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
12560 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
12570 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64   the jump if and
12580 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e   only if P3 is n
12590 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f  on-zero..*/./* O
125a0 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20  pcode: IfNot P1 
125b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
125c0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
125d0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
125e0 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e  ter P1 is False.
125f0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
12600 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c  s considered fal
12610 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20 6e  se if it has a n
12620 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20  umeric value of 
12630 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61  zero.  If the va
12640 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20  lue.** in P1 is 
12650 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
12660 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f  he jump if and o
12670 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e  nly if P3 is non
12680 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f  -zero..*/.case O
12690 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20 20  P_If:           
126a0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
126b0 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n1 */.case OP_If
126c0 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
126d0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
126e0 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e  /.  int c;.  pIn
126f0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12700 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
12710 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
12720 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d   ){.    c = pOp-
12730 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69  >p3;.  }else{.#i
12740 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
12750 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
12760 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
12770 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
12780 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20  )!=0;.#else.    
12790 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  c = sqlite3VdbeR
127a0 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  ealValue(pIn1)!=
127b0 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  0.0;.#endif.    
127c0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
127d0 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20  =OP_IfNot ) c = 
127e0 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  !c;.  }.  VdbeBr
127f0 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20  anchTaken(c!=0, 
12800 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a 20  2);.  if( c ){. 
12810 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
12820 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
12830 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
12840 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
12850 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
12860 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67  if r[P1]==NULL g
12870 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
12880 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
12890 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
128a0 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
128b0 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
128c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
128d0 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
128e0 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
128f0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12900 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
12910 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
12920 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12930 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)!=0, 2);.  i
12940 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
12950 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
12960 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
12970 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
12980 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12990 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20  : NotNull P1 P2 
129a0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
129b0 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c  s: if r[P1]!=NUL
129c0 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
129d0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
129e0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
129f0 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55  ter P1 is not NU
12a00 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  LL.  .*/.case OP
12a10 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  _NotNull: {     
12a20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
12a30 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75  s TK_NOTNULL, ju
12a40 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
12a50 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12a60 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
12a70 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
12a80 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12a90 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
12aa0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12ab0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12ac0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12ad0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12ae0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
12af0 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  umn P1 P2 P3 P4 
12b00 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
12b10 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20   r[P3]=PX.**.** 
12b20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61  Interpret the da
12b30 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  ta that cursor P
12b40 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61  1 points to as a
12b50 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74   structure built
12b60 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61   using.** the Ma
12b70 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
12b80 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20  tion.  (See the 
12b90 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
12ba0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
12bb0 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
12bc0 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74  about the format
12bd0 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20   of the data.)  
12be0 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74  Extract the P2-t
12bf0 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d  h column.** from
12c00 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49   this record.  I
12c10 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  f there are less
12c20 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a   that (P2+1) .**
12c30 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72   values in the r
12c40 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61  ecord, extract a
12c50 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
12c60 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64   value extracted
12c70 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
12c80 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
12c90 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   If the column c
12ca0 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68  ontains fewer th
12cb0 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68  an P2 fields, th
12cc0 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  en extract a NUL
12cd0 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68  L.  Or,.** if th
12ce0 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  e P4 argument is
12cf0 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68   a P4_MEM use th
12d00 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
12d10 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a  4 argument as.**
12d20 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a   the result..**.
12d30 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
12d40 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20  _CLEARCACHE bit 
12d50 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64  is set on P5 and
12d60 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
12d70 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a  table cursor,.**
12d80 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20   then the cache 
12d90 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  of the cursor is
12da0 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20   reset prior to 
12db0 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63  extracting the c
12dc0 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69  olumn..** The fi
12dd0 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67  rst OP_Column ag
12de0 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74  ainst a pseudo-t
12df0 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76  able after the v
12e00 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  alue of the cont
12e10 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ent.** register 
12e20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75  has changed shou
12e30 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74  ld have this bit
12e40 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   set..**.** If t
12e50 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  he OPFLAG_LENGTH
12e60 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
12e70 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72  YPEOFARG bits ar
12e80 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e  e set on P5 when
12e90 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
12ea0 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  s guaranteed to 
12eb0 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
12ec0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20  the argument of 
12ed0 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72  a length().** or
12ee0 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
12ef0 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
12f00 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f  .  The loading o
12f10 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61  f large blobs ca
12f20 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20  n be.** skipped 
12f30 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64  for length() and
12f40 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61   all content loa
12f50 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70  ding can be skip
12f60 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  ped for typeof()
12f70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
12f80 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70 61 79  umn: {.  i64 pay
12f90 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a 20 4e  loadSize64; /* N
12fa0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
12fb0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
12fc0 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
12fd0 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
12fe0 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
12ff0 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
13000 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
13010 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
13020 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
13030 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
13040 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
13050 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
13060 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
13070 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
13080 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
13090 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
130a0 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
130b0 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20    /* The length 
130c0 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65  of the serialize
130d0 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  d data for the c
130e0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  olumn */.  int i
130f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13100 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
13110 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
13120 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
13130 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
13140 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
13150 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
13160 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
13170 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
13180 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
13190 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61   const u8 *zData
131a0 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74  ;   /* Part of t
131b0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
131c0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
131d0 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20  st u8 *zHdr;    
131e0 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64  /* Next unparsed
131f0 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61   byte of the hea
13200 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  der */.  const u
13210 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50  8 *zEndHdr; /* P
13220 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
13230 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
13240 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
13250 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
13260 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
13270 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34 20 6f   data */.  u64 o
13280 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a  ffset64;      /*
13290 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a   64-bit offset *
132a0 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20  /.  u32 avail;  
132b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
132c0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
132d0 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20  ilable data */. 
132e0 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20   u32 t;         
132f0 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f      /* A type co
13300 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  de from the reco
13310 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d  rd header */.  M
13320 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
13330 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
13340 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
13350 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  */..  pC = p->ap
13360 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
13370 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20  p2 = pOp->p2;.. 
13380 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
13390 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65  r cache is stale
133a0 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f  , bring it up-to
133b0 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20  -date */.  rc = 
133c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
133d0 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32  rMoveto(&pC, &p2
133e0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
133f0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
13400 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
13410 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
13420 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
13430 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
13440 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
13450 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
13460 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
13470 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
13480 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
13490 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
134a0 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
134b0 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
134c0 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
134d0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
134e0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
134f0 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
13500 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
13510 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
13520 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
13530 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
13540 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
13550 52 54 45 52 20 29 3b 0a 20 20 70 43 72 73 72 20  RTER );.  pCrsr 
13560 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
13570 3b 0a 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  ;..  if( rc ) go
13580 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
13590 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d  error;.  if( pC-
135a0 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d  >cacheStatus!=p-
135b0 3e 63 61 63 68 65 43 74 72 20 29 7b 0a 20 20 20  >cacheCtr ){.   
135c0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
135d0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43   ){.      if( pC
135e0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
135f0 59 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20  YPE_PSEUDO ){.  
13600 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
13610 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65  ->uc.pseudoTable
13620 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  Reg>0 );.       
13630 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43   pReg = &aMem[pC
13640 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65  ->uc.pseudoTable
13650 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73  Reg];.        as
13660 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67  sert( pReg->flag
13670 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
13680 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
13690 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29  memIsValid(pReg)
136a0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   );.        pC->
136b0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
136c0 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20  ->szRow = avail 
136d0 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20  = pReg->n;.     
136e0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75     pC->aRow = (u
136f0 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20  8*)pReg->z;.    
13700 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13710 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
13720 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
13730 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
13740 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20  olumn_out;.     
13750 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
13760 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
13770 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
13780 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20  E_BTREE );.     
13790 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
137a0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  ;.      if( pC->
137b0 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
137c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
137d0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
137e0 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
137f0 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e  ;.        VVA_ON
13800 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
13810 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72  BtreeKeySize(pCr
13820 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65  sr, &payloadSize
13830 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  64);.        ass
13840 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
13850 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65  OK ); /* True be
13860 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
13870 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
13880 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a  ve */.        /*
13890 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72   sqlite3BtreePar
138a0 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73  seCellPtr() uses
138b0 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74   getVarint32() t
138c0 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20  o extract the.  
138d0 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64        ** payload
138e0 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20   size, so it is 
138f0 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70  impossible for p
13900 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20  ayloadSize64 to 
13910 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61  be.        ** la
13920 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74  rger than 32 bit
13930 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  s. */.        as
13940 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69  sert( (payloadSi
13950 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41  ze64 & SQLITE_MA
13960 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79  X_U32)==(u64)pay
13970 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20  loadSize64 );.  
13980 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
13990 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
139a0 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76  Fetch(pCrsr, &av
139b0 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43  ail);.        pC
139c0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
139d0 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65  (u32)payloadSize
139e0 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  64;.      }else{
139f0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13a00 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
13a10 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
13a20 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41  ) );.        VVA
13a30 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
13a40 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65  te3BtreeDataSize
13a50 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79  (pCrsr, &pC->pay
13a60 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20  loadSize);.     
13a70 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
13a80 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
13a90 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
13aa0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20  ot fail */.     
13ab0 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
13ac0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65  lite3BtreeDataFe
13ad0 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69  tch(pCrsr, &avai
13ae0 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  l);.      }.    
13af0 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c    assert( avail<
13b00 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
13b10 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
13b20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
13b30 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
13b40 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
13b50 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ail ){.        p
13b60 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70  C->szRow = pC->p
13b70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
13b80 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
13b90 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75  payloadSize > (u
13ba0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
13bb0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
13bc0 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  H] ){.        go
13bd0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
13be0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13bf0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
13c00 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  il;.      }.    
13c10 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  }.    pC->cacheS
13c20 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
13c30 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64  Ctr;.    pC->iHd
13c40 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72  rOffset = getVar
13c50 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20  int32(pC->aRow, 
13c60 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d  offset);.    pC-
13c70 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b  >nHdrParsed = 0;
13c80 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20  .    aOffset[0] 
13c90 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20  = offset;...    
13ca0 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74  if( avail<offset
13cb0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d   ){.      /* pC-
13cc0 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68  >aRow does not h
13cd0 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ave to hold the 
13ce0 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20  entire row, but 
13cf0 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74  it does at least
13d00 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74  .      ** need t
13d10 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64  o cover the head
13d20 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  er of the record
13d30 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64  .  If pC->aRow d
13d40 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a  oes not contain.
13d50 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d        ** the com
13d60 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68  plete header, th
13d70 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72  en set it to zer
13d80 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68  o, forcing the h
13d90 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20  eader to be.    
13da0 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79    ** dynamically
13db0 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20   allocated. */. 
13dc0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
13dd0 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52  0;.      pC->szR
13de0 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f  ow = 0;..      /
13df0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f  * Make sure a co
13e00 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68  rrupt database h
13e10 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20  as not given us 
13e20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64  an oversize head
13e30 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20  er..      ** Do 
13e40 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69  this now to avoi
13e50 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65  d an oversize me
13e60 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  mory allocation.
13e70 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
13e80 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20  ** Type entries 
13e90 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31  can be between 1
13ea0 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63   and 5 bytes eac
13eb0 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20  h.  But 4 and 5 
13ec0 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74 79  byte.      ** ty
13ed0 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20  pes use so much 
13ee0 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20  data space that 
13ef0 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
13f00 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66  e 4096 and 32 of
13f10 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20  .      ** them, 
13f20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53  respectively.  S
13f30 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65  o the maximum he
13f40 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75  ader length resu
13f50 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 20  lts from a.     
13f60 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20   ** 3-byte type 
13f70 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20  for each of the 
13f80 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38  maximum of 32768
13f90 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68   columns plus th
13fa0 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78 74  ree.      ** ext
13fb0 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65  ra bytes for the
13fc0 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69   header length i
13fd0 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20  tself.  32768*3 
13fe0 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20  + 3 = 98307..   
13ff0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
14000 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c  offset > 98307 |
14010 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70  | offset > pC->p
14020 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
14030 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
14040 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
14050 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
14060 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
14070 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
14080 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
14090 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20  wing goto is an 
140a0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49  optimization.  I
140b0 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64  t can be omitted
140c0 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65 76 65 72   and.    ** ever
140d0 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c  ything will stil
140e0 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f  l work.  But OP_
140f0 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75 72  Column is measur
14100 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20 20 20  ably faster.    
14110 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74  ** by skipping t
14120 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f  he subsequent co
14130 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68  nditional, which
14140 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e   is always true.
14150 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
14160 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  rt( pC->nHdrPars
14170 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20  ed<=p2 );       
14180 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c    /* Conditional
14190 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20   skipped */.    
141a0 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  goto op_column_r
141b0 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 7d 0a  ead_header;.  }.
141c0 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
141d0 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72  at least the fir
141e0 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20  st p2+1 entries 
141f0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61  of the header ha
14200 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72  ve been.  ** par
14210 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e  sed and valid in
14220 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20  formation is in 
14230 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43  aOffset[] and pC
14240 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a  ->aType[]..  */.
14250 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
14260 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
14270 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d  /* If there is m
14280 6f 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c  ore header avail
14290 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67  able for parsing
142a0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
142b0 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78  try.    ** to ex
142c0 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c  tract additional
142d0 20 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75   fields up throu
142e0 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66  gh the p2+1-th f
142f0 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ield .    */.   
14300 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
14310 68 65 61 64 65 72 3a 0a 20 20 20 20 69 66 28 20  header:.    if( 
14320 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61  pC->iHdrOffset<a
14330 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20  Offset[0] ){.   
14340 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
14350 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20  zData points to 
14360 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65  enough of the re
14370 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68  cord to cover th
14380 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
14390 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
143a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65  =0 ){.        me
143b0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
143c0 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
143d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
143e0 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
143f0 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66  ee(pCrsr, 0, aOf
14400 66 73 65 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73  fset[0], !pC->is
14410 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20  Table, &sMem);. 
14420 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
14430 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
14440 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
14450 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  or;.        zDat
14460 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
14470 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14480 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
14490 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
144a0 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
144b0 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d   in pC->aType[i]
144c0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
144d0 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
144e0 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
144f0 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d  */.      i = pC-
14500 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20  >nHdrParsed;.   
14510 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f     offset64 = aO
14520 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20  ffset[i];.      
14530 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70  zHdr = zData + p
14540 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20  C->iHdrOffset;. 
14550 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a       zEndHdr = z
14560 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30  Data + aOffset[0
14570 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
14580 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
14590 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
145a0 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
145b0 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78  (t = zHdr[0])<0x
145c0 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
145d0 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
145e0 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
145f0 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65  lite3VdbeOneByte
14600 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
14610 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
14620 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
14630 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
14640 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
14650 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14660 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14670 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
14680 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
14690 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b        pC->aType[
146a0 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  i++] = t;.      
146b0 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
146c0 75 33 32 29 28 6f 66 66 73 65 74 36 34 20 26 20  u32)(offset64 & 
146d0 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20  0xffffffff);.   
146e0 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
146f0 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
14700 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   );.      pC->nH
14710 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
14720 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
14730 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
14740 2d 20 7a 44 61 74 61 29 3b 0a 20 20 0a 20 20 20  - zData);.  .   
14750 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64     /* The record
14760 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61   is corrupt if a
14770 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ny of the follow
14780 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20  ing are true:.  
14790 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62      ** (1) the b
147a0 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ytes of the head
147b0 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74  er extend past t
147c0 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64  he declared head
147d0 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a  er size.      **
147e0 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20   (2) the entire 
147f0 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20  header was used 
14800 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61  but not all data
14810 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20   was used.      
14820 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f  ** (3) the end o
14830 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e  f the data exten
14840 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e  ds beyond the en
14850 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  d of the record.
14860 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14870 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48  if( (zHdr>=zEndH
14880 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64  dr && (zHdr>zEnd
14890 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21  Hdr || offset64!
148a0 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65  =pC->payloadSize
148b0 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66  )).       || (of
148c0 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79  fset64 > pC->pay
148d0 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20  loadSize).      
148e0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
148f0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c  C->aRow==0 ) sql
14900 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
14910 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  se(&sMem);.     
14920 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
14930 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
14940 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
14950 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
14960 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
14970 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71  pC->aRow==0 ) sq
14980 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
14990 61 73 65 28 26 73 4d 65 6d 29 3b 0a 0a 20 20 20  ase(&sMem);..   
149a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20   }else{.      t 
149b0 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
149c0 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
149d0 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65  ng to extract ne
149e0 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
149f0 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
14a00 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
14a10 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
14a20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
14a30 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
14a40 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
14a50 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
14a60 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
14a70 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
14a80 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
14a90 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
14aa0 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
14ab0 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
14ac0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
14ad0 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
14ae0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
14af0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
14b00 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
14b10 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
14b20 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
14b30 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
14b40 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
14b50 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d  (pDest);.      }
14b60 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
14b70 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
14b80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20  .  }else{.    t 
14b90 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
14ba0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
14bb0 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
14bc0 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
14bd0 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
14be0 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
14bf0 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
14c00 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
14c10 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
14c20 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  d pC->aType[p2] 
14c30 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
14c40 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
14c50 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
14c60 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
14c70 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
14c80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
14c90 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
14ca0 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
14cb0 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  ) );.  if( VdbeM
14cc0 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
14cd0 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
14ce0 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
14cf0 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43  .  assert( t==pC
14d00 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20  ->aType[p2] );. 
14d10 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e   pDest->enc = en
14d20 63 6f 64 69 6e 67 3b 0a 20 20 69 66 28 20 70 43  coding;.  if( pC
14d30 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
14d40 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
14d50 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
14d60 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
14d70 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
14d80 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
14d90 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
14da0 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
14db0 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
14dc0 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
14dd0 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20  ge */.    zData 
14de0 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66  = pC->aRow + aOf
14df0 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66  fset[p2];.    if
14e00 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20  ( t<12 ){.      
14e10 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14e20 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
14e30 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
14e40 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
14e50 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
14e60 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e  s a string, we n
14e70 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74  eed a persistent
14e80 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20   value, not.    
14e90 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d    ** a MEM_Ephem
14ea0 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72   value.  This br
14eb0 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73  anch is a fast s
14ec0 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73  hort-cut that is
14ed0 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20   equivalent.    
14ee0 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20    ** to calling 
14ef0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14f00 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74  lGet() and sqlit
14f10 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61  e3VdbeDeephemera
14f20 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lize()..      */
14f30 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
14f40 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20  nst u16 aFlag[] 
14f50 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45  = { MEM_Blob, ME
14f60 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d  M_Str|MEM_Term }
14f70 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e  ;.      pDest->n
14f80 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f   = len = (t-12)/
14f90 32 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65  2;.      if( pDe
14fa0 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c  st->szMalloc < l
14fb0 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20  en+2 ){.        
14fc0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d  pDest->flags = M
14fd0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
14fe0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
14ff0 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c  MemGrow(pDest, l
15000 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20  en+2, 0) ) goto 
15010 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
15020 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65  lse{.        pDe
15030 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a  st->z = pDest->z
15040 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a  Malloc;.      }.
15050 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65        memcpy(pDe
15060 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
15070 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  n);.      pDest-
15080 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
15090 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b     pDest->z[len+
150a0 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  1] = 0;.      pD
150b0 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c  est->flags = aFl
150c0 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20  ag[t&1];.    }. 
150d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
150e0 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65  his branch happe
150f0 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e  ns only when con
15100 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66  tent is on overf
15110 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20  low pages */.   
15120 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26   if( ((pOp->p5 &
15130 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41   (OPFLAG_LENGTHA
15140 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  RG|OPFLAG_TYPEOF
15150 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20  ARG))!=0.       
15160 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26     && ((t>=12 &&
15170 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70   (t&1)==0) || (p
15180 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
15190 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a  TYPEOFARG)!=0)).
151a0 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73       || (len = s
151b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
151c0 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20  TypeLen(t))==0. 
151d0 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43     ){.      /* C
151e0 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65  ontent is irrele
151f0 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a  vant for.      *
15200 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65  *    1. the type
15210 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20  of() function,. 
15220 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68       **    2. th
15230 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63  e length(X) func
15240 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62  tion if X is a b
15250 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a  lob, and.      *
15260 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63  *    3. if the c
15270 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73  ontent length is
15280 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20   zero..      ** 
15290 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77  So we might as w
152a0 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f  ell use bogus co
152b0 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61  ntent rather tha
152c0 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20  n reading.      
152d0 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20  ** content from 
152e0 64 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20 20 73  disk. */.      s
152f0 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 38  tatic u8 aZero[8
15300 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ];  /* This is t
15310 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  he bogus content
15320 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
15330 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61  3VdbeSerialGet(a
15340 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b  Zero, t, pDest);
15350 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15360 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
15370 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
15380 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  Crsr, aOffset[p2
15390 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54  ], len, !pC->isT
153a0 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20  able,.          
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153c0 20 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b           pDest);
153d0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
153e0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
153f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
15400 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  or;.      sqlite
15410 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
15420 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d  const u8*)pDest-
15430 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  >z, t, pDest);. 
15440 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15450 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b  s &= ~MEM_Ephem;
15460 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63  .    }.  }..op_c
15470 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44  olumn_out:.  UPD
15480 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
15490 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
154a0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
154b0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
154c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
154d0 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
154e0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
154f0 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
15500 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70  P1@P2]).**.** Ap
15510 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
15520 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
15530 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
15540 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
15550 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
15560 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
15570 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
15580 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
15590 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
155a0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
155b0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
155c0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
155d0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
155e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
155f0 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
15600 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
15610 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
15620 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
15630 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
15640 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
15650 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
15660 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
15670 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
15680 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
15690 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
156a0 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
156b0 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
156c0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
156d0 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
156e0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
156f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
15700 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
15710 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
15720 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
15730 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
15740 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
15750 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
15760 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
15770 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
15780 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
15790 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63  (pIn1, cAff, enc
157a0 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31  oding);.    pIn1
157b0 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
157c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
157d0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
157e0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
157f0 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
15800 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
15810 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
15820 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
15830 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
15840 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
15850 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
15860 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
15870 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
15880 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
15890 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
158a0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
158b0 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
158c0 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
158d0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
158e0 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
158f0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
15900 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
15910 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
15920 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
15930 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
15940 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
15950 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
15960 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
15970 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
15980 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
15990 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
159a0 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
159b0 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
159c0 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
159d0 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
159e0 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
159f0 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
15a00 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
15a10 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
15a20 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61  nity BLOB..*/.ca
15a30 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
15a40 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65  : {.  u8 *zNewRe
15a50 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cord;        /* 
15a60 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64  A buffer to hold
15a70 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
15a80 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15a90 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
15aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15ab0 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
15ac0 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
15ad0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15ae0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
15af0 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
15b00 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
15b10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15b20 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
15b30 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
15b40 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
15b50 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
15b60 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
15b70 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
15b80 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  64 nZero;       
15b90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15ba0 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
15bb0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15bc0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
15bd0 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
15be0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15bf0 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
15c00 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
15c10 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
15c20 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
15c30 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
15c40 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
15c50 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
15c60 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
15c70 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
15c80 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
15c90 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
15ca0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
15cb0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
15cc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15cd0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
15ce0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15cf0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
15d00 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
15d10 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
15d20 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
15d30 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
15d40 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
15d50 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
15d60 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
15d70 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
15d80 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
15d90 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
15da0 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f  cord[] header */
15db0 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
15dc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
15dd0 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
15de0 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20  ecord[] content 
15df0 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20  */.  u32 len;   
15e00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
15e10 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64  ength of a field
15e20 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69   */..  /* Assumi
15e30 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
15e40 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
15e50 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
15e60 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
15e70 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
15e80 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
15e90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ea0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15eb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ec0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
15ed0 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
15ee0 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
15ef0 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
15f00 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
15f10 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
15f20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15f60 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
15f70 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
15f80 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
15f90 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
15fa0 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
15fb0 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
15fc0 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a   so forth..  **.
15fd0 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
15fe0 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
15ff0 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
16000 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
16010 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
16020 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
16030 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
16040 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
16050 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
16060 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
16070 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
16080 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
16090 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
160a0 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
160b0 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
160c0 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d  ..  */.  nData =
160d0 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
160e0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
160f0 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
16100 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20    nHdr = 0;     
16110 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16120 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
16130 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65  r space */.  nZe
16140 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
16150 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
16160 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
16170 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
16180 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
16190 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
161a0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
161b0 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
161c0 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
161d0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
161e0 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  ld<=(p->nMem+1 -
161f0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
16200 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d  ;.  pData0 = &aM
16210 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
16220 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
16230 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
16240 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
16250 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
16260 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
16270 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69  at;..  /* Identi
16280 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  fy the output re
16290 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65  gister */.  asse
162a0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
162b0 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
162c0 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
162d0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
162e0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
162f0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
16300 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41  , pOut);..  /* A
16310 70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74  pply the request
16320 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61  ed affinity to a
16330 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20  ll inputs.  */. 
16340 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
16350 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20  =pLast );.  if( 
16360 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
16370 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
16380 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70      do{.      ap
16390 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
163a0 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  ++, *(zAffinity+
163b0 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  +), encoding);. 
163c0 20 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66       assert( zAf
163d0 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20  finity[0]==0 || 
163e0 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  pRec<=pLast );. 
163f0 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69     }while( zAffi
16400 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a  nity[0] );.  }..
16410 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
16420 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
16430 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
16440 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
16450 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
16460 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
16470 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
16480 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
16490 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
164a0 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
164b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
164c0 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65  pRec) );.    pRe
164d0 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61  c->uTemp = seria
164e0 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
164f0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
16500 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
16510 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28  , &len);.    if(
16520 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
16530 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
16540 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
16550 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
16560 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
16570 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
16580 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16590 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
165a0 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
165b0 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
165c0 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
165d0 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
165e0 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
165f0 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
16600 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16610 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
16620 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16630 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
16640 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
16650 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
16660 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
16670 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
16680 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20   pRec==pData0 ) 
16690 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d  break;.    pRec-
166a0 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a  -;.  }while(1);.
166b0 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  /* EVIDENCE-O
166c0 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37  F: R-22564-11647
166d0 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69   The header begi
166e0 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
166f0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69   varint.  ** whi
16700 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
16710 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
16720 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
16730 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e  eader. The varin
16740 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20  t.  ** value is 
16750 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
16760 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20  header in bytes 
16770 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
16780 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69  ze varint.  ** i
16790 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74  tself. */.  test
167a0 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
167b0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
167c0 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
167d0 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
167e0 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
167f0 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
16800 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
16810 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
16820 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
16830 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
16840 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
16850 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
16860 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
16870 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
16880 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
16890 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
168a0 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
168b0 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
168c0 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b  ta;.  if( nByte+
168d0 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
168e0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
168f0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
16900 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
16910 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
16920 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16930 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
16940 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
16950 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
16960 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
16970 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
16980 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
16990 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
169a0 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
169b0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
169c0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
169d0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
169e0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
169f0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
16a00 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
16a10 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
16a20 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
16a30 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
16a40 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
16a50 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
16a60 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
16a70 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
16a80 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
16a90 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
16aa0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
16ab0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
16ac0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
16ad0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
16ae0 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
16af0 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
16b00 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
16b10 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
16b20 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
16b30 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
16b40 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
16b50 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
16b60 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
16b70 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
16b80 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
16b90 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
16ba0 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
16bb0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
16bc0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
16bd0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
16be0 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
16bf0 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
16c00 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
16c10 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
16c20 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
16c30 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
16c40 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
16c50 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
16c60 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
16c70 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
16c80 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16c90 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
16ca0 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
16cb0 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
16cc0 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
16cd0 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
16ce0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
16cf0 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
16d00 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
16d10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
16d20 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
16d30 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
16d40 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
16d50 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
16d60 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
16d70 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
16d80 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
16d90 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
16da0 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
16db0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
16dc0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  Zero;.  }.  pOut
16dd0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
16de0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
16df0 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
16e00 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74  r converted to t
16e10 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45  ext */.  REGISTE
16e20 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
16e30 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
16e40 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
16e50 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
16e60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e  ./* Opcode: Coun
16e70 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
16e80 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
16e90 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53  =count().**.** S
16ea0 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
16eb0 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
16ec0 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
16ed0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
16ee0 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
16ef0 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
16f00 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
16f10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16f20 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
16f30 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
16f40 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
16f50 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
16f60 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
16f70 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
16f80 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
16f90 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
16fa0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
16fb0 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  sr = p->apCsr[pO
16fc0 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73  p->p1]->uc.pCurs
16fd0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
16fe0 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20  rsr );.  nEntry 
16ff0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
17000 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
17010 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
17020 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
17030 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
17040 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
17050 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
17060 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17070 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20  error;.  pOut = 
17080 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
17090 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
170a0 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
170b0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
170c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
170d0 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
170e0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
170f0 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
17100 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
17110 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
17120 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
17130 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
17140 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
17150 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
17160 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
17170 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
17180 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
17190 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
171a0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
171b0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
171c0 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
171d0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
171e0 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17200 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
17210 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
17220 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17240 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
17250 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
17260 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
17270 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
17280 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
17290 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
172a0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
172b0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
172c0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
172d0 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
172e0 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
172f0 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
17300 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
17310 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
17320 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
17330 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
17340 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
17350 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
17360 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
17370 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
17380 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
17390 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
173a0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
173b0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
173c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
173d0 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
173e0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
173f0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
17400 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
17410 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17420 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
17430 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
17440 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
17450 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
17460 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
17470 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17480 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
17490 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
174a0 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
174b0 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
174c0 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
174d0 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
174e0 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
174f0 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
17500 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
17510 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
17520 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
17530 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
17540 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
17550 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65  r(p, "cannot ope
17560 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  n savepoint - SQ
17570 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17580 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17590 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
175a0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
175b0 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
175c0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
175d0 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
175e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
175f0 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
17600 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
17610 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
17620 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
17630 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
17640 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
17650 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
17660 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
17670 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
17680 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
17690 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
176a0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
176b0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
176c0 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
176d0 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
176e0 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
176f0 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
17700 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
17710 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
17720 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
17730 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
17740 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
17750 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
17760 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
17770 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
177a0 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
177b0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
177c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
177d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
177e0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
177f0 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
17800 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
17810 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
17820 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
17830 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
17840 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  N(db, sizeof(Sav
17850 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
17860 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
17870 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
17880 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
17890 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
178a0 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
178b0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
178c0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
178d0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
178e0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
178f0 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
17900 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
17910 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
17920 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
17930 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
17940 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
17950 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
17960 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17970 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
17980 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
17990 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
179a0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
179b0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
179c0 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
179d0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
179e0 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
179f0 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
17a00 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
17a10 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
17a20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
17a30 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
17a40 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
17a50 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
17a60 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
17a70 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
17a80 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
17a90 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
17aa0 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
17ab0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
17ac0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
17ad0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
17ae0 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
17af0 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
17b00 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
17b10 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
17b20 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
17b30 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
17b40 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
17b50 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
17b60 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
17b70 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
17b80 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
17b90 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
17ba0 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
17bb0 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
17bc0 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
17bd0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
17be0 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
17bf0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
17c00 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
17c10 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
17c20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
17c30 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
17c40 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
17c50 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
17c60 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
17c70 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17c80 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
17c90 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
17ca0 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && p1==S
17cb0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
17cc0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
17cd0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
17ce0 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
17cf0 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
17d00 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
17d10 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
17d20 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
17d30 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
17d40 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
17d50 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61  p, "cannot relea
17d60 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  se savepoint - "
17d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d80 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
17d90 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
17da0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
17db0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17dc0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
17dd0 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
17de0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
17df0 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
17e00 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
17e10 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
17e20 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
17e30 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
17e40 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
17e50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
17e60 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
17e70 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
17e80 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
17e90 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
17ea0 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
17eb0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
17ec0 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
17ed0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 62     assert( db->b
17ee0 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 7c 7c  Concurrent==0 ||
17ef0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
17f00 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
17f10 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72  ;.      if( isTr
17f20 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d  ansaction && p1=
17f30 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
17f40 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  SE ){.        if
17f50 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17f60 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17f70 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17f80 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
17f90 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
17fa0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
17fb0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
17fc0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71  ;.        if( sq
17fd0 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
17fe0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
17ff0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63  .          p->pc
18000 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
18010 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  Op);.          d
18020 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
18030 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  0;.          p->
18040 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
18050 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20  _BUSY;.         
18060 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18070 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
18080 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
18090 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
180a0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20  = 0;.        rc 
180b0 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d  = p->rc;.      }
180c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e  else{.        in
180d0 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  t isSchemaChange
180e0 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70  ;.        iSavep
180f0 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65  oint = db->nSave
18100 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69  point - iSavepoi
18110 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt - 1;.        
18120 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
18130 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
18140 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
18150 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c  Change = (db->fl
18160 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 74  ags & SQLITE_Int
18170 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a  ernChanges)!=0;.
18180 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
18190 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
181a0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
181b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
181c0 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
181d0 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
181e0 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
181f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18200 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
18210 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
18220 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
18250 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
18260 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
18270 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18280 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18290 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
182a0 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
182b0 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
182c0 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
182d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
182e0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
182f0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
18300 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
18310 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
18320 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
18330 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
18340 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
18350 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
18360 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
18370 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18380 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
18390 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
183a0 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
183b0 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
183c0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
183d0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
183e0 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
183f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
18400 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
18410 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
18420 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
18430 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
18440 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
18450 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
18460 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
18470 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
18480 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
18490 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
184a0 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
184b0 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
184c0 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
184d0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
184e0 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
184f0 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
18500 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
18510 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
18520 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
18530 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
18540 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
18550 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
18560 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
18570 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
18580 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
18590 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
185a0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
185b0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
185c0 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
185d0 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
185e0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
185f0 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
18600 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
18610 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
18620 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
18630 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
18640 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
18650 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
18660 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
18670 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
18680 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
18690 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
186a0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
186b0 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
186c0 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
186d0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
186e0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
186f0 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
18700 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
18710 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
18720 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
18730 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
18740 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
18750 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
18760 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
18770 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
18780 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
18790 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
187a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
187b0 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
187c0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
187d0 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
187e0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
187f0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
18800 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
18810 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
18820 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
18830 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
18840 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d  ansaction || p1=
18850 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
18860 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ACK ){.        r
18870 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
18880 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
18890 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
188a0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
188b0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
188c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
188d0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
188e0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
188f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18900 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61  o_error;..  brea
18910 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
18920 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
18930 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53  2 P3 * *.**.** S
18940 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
18950 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
18960 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e   to P1 (1 or 0).
18970 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20   If P2 is true, 
18980 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79  roll.** back any
18990 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76   currently activ
189a0 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74  e btree transact
189b0 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61  ions. If there a
189c0 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a  re any active.**
189d0 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d   VMs (apart from
189e0 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e   this one), then
189f0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c   a ROLLBACK fail
18a00 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69  s.  A COMMIT fai
18a10 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61  ls if.** there a
18a20 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e  re active writin
18a30 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20  g VMs or active 
18a40 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61  VMs that use sha
18a50 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a  red cache..**.**
18a60 20 49 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   If P3 is non-ze
18a70 72 6f 2c 20 74 68 65 6e 20 74 68 69 73 20 69 6e  ro, then this in
18a80 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
18a90 6e 67 20 65 78 65 63 75 74 65 64 20 61 73 20 70  ng executed as p
18aa0 61 72 74 20 6f 66 0a 2a 2a 20 61 20 22 42 45 47  art of.** a "BEG
18ab0 49 4e 20 43 4f 4e 43 55 52 52 45 4e 54 22 20 63  IN CONCURRENT" c
18ac0 6f 6d 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  ommand..**.** Th
18ad0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
18ae0 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
18af0 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
18b00 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
18b10 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
18b20 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
18b30 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 62  ollback;.  int b
18b40 43 6f 6e 63 75 72 72 65 6e 74 3b 0a 20 20 69 6e  Concurrent;.  in
18b50 74 20 68 72 63 3b 0a 0a 20 20 64 65 73 69 72 65  t hrc;..  desire
18b60 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
18b70 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
18b80 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
18b90 62 43 6f 6e 63 75 72 72 65 6e 74 20 3d 20 70 4f  bConcurrent = pO
18ba0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
18bb0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
18bc0 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
18bd0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
18be0 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
18bf0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
18c00 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
18c10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
18c20 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
18c30 30 20 7c 7c 20 62 43 6f 6e 63 75 72 72 65 6e 74  0 || bConcurrent
18c40 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
18c50 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
18c60 3d 30 20 7c 7c 20 64 62 2d 3e 62 43 6f 6e 63 75  =0 || db->bConcu
18c70 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  rrent==0 );.  as
18c80 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
18c90 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
18ca0 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
18cb0 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
18cc0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
18cd0 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
18ce0 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
18cf0 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
18d00 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
18d10 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
18d20 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
18d30 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
18d40 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
18d50 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53  ollbackAll(db, S
18d60 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
18d70 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d  BACK);.      db-
18d80 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
18d90 0a 20 20 20 20 20 20 64 62 2d 3e 62 43 6f 6e 63  .      db->bConc
18da0 75 72 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20  urrent = 0;.    
18db0 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
18dc0 64 41 75 74 6f 43 6f 6d 6d 69 74 0a 20 20 20 20  dAutoCommit.    
18dd0 20 20 20 20 20 20 20 20 26 26 20 28 64 62 2d 3e          && (db->
18de0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 7c 7c 20  nVdbeWrite>0 || 
18df0 28 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74  (db->bConcurrent
18e00 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74   && db->nVdbeAct
18e10 69 76 65 3e 31 29 29 20 29 7b 0a 20 20 20 20 20  ive>1)) ){.     
18e20 20 2f 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f   /* A transactio
18e30 6e 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 63 6f  n may only be co
18e40 6d 6d 69 74 74 65 64 20 69 66 20 74 68 65 72 65  mmitted if there
18e50 20 61 72 65 20 6e 6f 20 6f 74 68 65 72 20 61 63   are no other ac
18e60 74 69 76 65 0a 20 20 20 20 20 20 2a 2a 20 77 72  tive.      ** wr
18e70 69 74 65 72 20 56 4d 73 2e 20 49 66 20 74 68 65  iter VMs. If the
18e80 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
18e90 43 4f 4e 43 55 52 52 45 4e 54 2c 20 74 68 65 6e  CONCURRENT, then
18ea0 20 69 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 0a   it may only be.
18eb0 20 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 69 74 74        ** committ
18ec0 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
18ed0 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 20 61 74  no active VMs at
18ee0 20 61 6c 6c 20 28 72 65 61 64 65 72 73 20 6f 72   all (readers or
18ef0 20 77 72 69 74 65 72 73 29 2e 0a 20 20 20 20 20   writers)..     
18f00 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 49 66 20   **.      ** If 
18f10 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
18f20 20 69 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64   is a COMMIT and
18f30 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
18f40 20 6d 61 79 20 6e 6f 74 20 62 65 0a 20 20 20 20   may not be.    
18f50 20 20 2a 2a 20 63 6f 6d 6d 69 74 74 65 64 20 64    ** committed d
18f60 75 65 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ue to one of the
18f70 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 62 6f 76   conditions abov
18f80 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
18f90 6f 72 0a 20 20 20 20 20 20 2a 2a 20 69 6e 64 69  or.      ** indi
18fa0 63 61 74 69 6e 67 20 74 68 61 74 20 6f 74 68 65  cating that othe
18fb0 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c  r VMs must compl
18fc0 65 74 65 20 62 65 66 6f 72 65 20 74 68 65 20 43  ete before the C
18fd0 4f 4d 4d 49 54 20 63 61 6e 20 0a 20 20 20 20 20  OMMIT can .     
18fe0 20 2a 2a 20 62 65 20 70 72 6f 63 65 73 73 65 64   ** be processed
18ff0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  .  */.      sqli
19000 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
19010 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
19020 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74           "SQL st
19050 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
19060 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
19070 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
19080 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
19090 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
190a0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63     }else if( (rc
190b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
190c0 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
190d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
190e0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
190f0 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  n;.    }else{.  
19100 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
19110 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
19120 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
19130 7d 0a 20 20 20 20 68 72 63 20 3d 20 73 71 6c 69  }.    hrc = sqli
19140 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
19150 20 20 20 20 69 66 28 20 28 68 72 63 20 26 20 30      if( (hrc & 0
19160 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xFF)==SQLITE_BUS
19170 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
19180 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
19190 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Op);.      db->a
191a0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
191b0 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
191c0 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e  mmit);.      p->
191d0 72 63 20 3d 20 68 72 63 3b 0a 20 20 20 20 20 20  rc = hrc;.      
191e0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
191f0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
19200 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
19210 20 20 20 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72      db->bConcurr
19220 65 6e 74 20 3d 20 28 75 38 29 62 43 6f 6e 63 75  ent = (u8)bConcu
19230 72 72 65 6e 74 3b 0a 20 20 20 20 61 73 73 65 72  rrent;.    asser
19240 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
19250 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
19260 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
19270 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
19280 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
19290 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
192a0 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
192b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
192c0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
192d0 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
192e0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
192f0 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
19300 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
19310 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
19320 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
19330 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
19340 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
19350 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
19360 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
19370 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
19380 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
19390 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
193c0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
193d0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
193e0 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
193f0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
19400 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
19410 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19420 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
19430 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
19440 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
19450 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
19460 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
19470 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
19480 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
19490 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
194a0 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
194b0 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
194c0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
194d0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
194e0 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
194f0 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
19500 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
19510 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
19520 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
19530 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
19540 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
19550 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
19560 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
19570 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
19580 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
19590 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
195a0 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
195b0 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
195c0 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
195d0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
195e0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
195f0 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
19600 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
19610 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
19620 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
19630 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
19640 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
19650 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
19660 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
19670 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
19680 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
19690 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
196a0 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
196b0 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
196c0 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
196d0 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
196e0 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
196f0 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
19700 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
19710 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19720 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
19730 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
19740 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
19750 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19760 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
19770 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
19780 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
19790 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
197a0 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
197b0 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
197c0 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
197d0 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
197e0 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
197f0 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
19800 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
19810 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
19820 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
19830 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
19840 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
19850 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
19860 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
19870 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
19880 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
19890 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
198a0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
198b0 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
198c0 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
198d0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
198e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
198f0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
19900 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
19910 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
19920 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
19930 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
19940 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
19950 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
19960 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
19970 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
19980 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
19990 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
199a0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
199b0 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
199c0 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
199d0 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
199e0 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
199f0 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
19a00 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
19a10 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
19a20 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
19a30 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
19a40 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19a50 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
19a60 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19a70 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
19a80 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
19a90 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
19aa0 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
19ab0 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
19ac0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
19ad0 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
19ae0 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
19af0 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
19b00 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
19b10 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
19b20 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
19b30 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
19b40 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
19b50 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
19b60 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
19b70 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
19b80 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
19b90 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
19ba0 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
19bb0 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
19bc0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19bd0 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
19be0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
19bf0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
19c00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19c10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19c20 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
19c30 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19c40 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19c50 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19c60 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
19c70 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
19c80 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
19c90 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
19ca0 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
19cb0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
19cc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
19cd0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
19ce0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
19cf0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
19d00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19d10 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
19d20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65  pOp->p2);.    te
19d30 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
19d40 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54  TE_BUSY_SNAPSHOT
19d50 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
19d60 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
19d70 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20  Y_RECOVERY );.  
19d80 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
19d90 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
19da0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
19db0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
19dc0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
19dd0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
19de0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
19df0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19e00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
19e10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19e20 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
19e30 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
19e40 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
19e50 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
19e60 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
19e70 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
19e80 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  d>1) .    ){.   
19e90 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
19ea0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
19eb0 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
19ec0 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
19ed0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
19ee0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
19ef0 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
19f00 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
19f10 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
19f20 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
19f30 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
19f40 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
19f50 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
19f60 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ent;.      }..  
19f70 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
19f80 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
19f90 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
19fa0 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  N, p->iStatement
19fb0 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  -1);.      if( r
19fc0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
19fd0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
19fe0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
19ff0 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
1a000 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  ement);.      }.
1a010 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
1a020 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
1a030 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
1a040 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
1a050 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
1a060 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
1a070 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
1a080 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
1a090 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
1a0a0 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
1a0b0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
1a0c0 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
1a0d0 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
1a0e0 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
1a0f0 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
1a100 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
1a110 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  ;.      p->nStmt
1a120 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  DefImmCons = db-
1a130 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
1a140 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  s;.    }..    /*
1a150 20 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65   Gather the sche
1a160 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
1a170 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a  r for checking:.
1a180 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54      ** IMPLEMENT
1a190 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39  ATION-OF: R-3219
1a1a0 35 2d 31 39 34 36 35 20 54 68 65 20 73 63 68 65  5-19465 The sche
1a1b0 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73  ma version is us
1a1c0 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20  ed by SQLite.   
1a1d0 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20   ** each time a 
1a1e0 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
1a1f0 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
1a200 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
1a210 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  che of the.    *
1a220 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20 77 68  * schema used wh
1a230 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65  en compiling the
1a240 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68   SQL query match
1a250 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  es the schema of
1a260 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61   the.    ** data
1a270 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
1a280 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
1a290 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
1a2a0 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20  y executed..    
1a2b0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  */.    sqlite3Bt
1a2c0 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
1a2d0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
1a2e0 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
1a2f0 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
1a300 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1a310 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
1a320 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
1a330 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
1a340 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  a = 0;.  }.  ass
1a350 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1a360 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
1a370 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
1a380 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d  ( pOp->p5 && (iM
1a390 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20  eta!=pOp->p3 || 
1a3a0 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  iGen!=pOp->p4.i)
1a3b0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
1a3c0 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
1a3d0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
1a3e0 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
1a3f0 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
1a400 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1a410 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
1a420 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
1a430 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
1a440 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
1a450 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
1a460 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
1a470 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
1a480 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
1a490 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
1a4a0 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
1a4b0 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
1a4c0 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
1a4d0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
1a4e0 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
1a4f0 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
1a500 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
1a510 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
1a520 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
1a530 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
1a540 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
1a550 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
1a560 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
1a570 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
1a580 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
1a590 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
1a5a0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
1a5b0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
1a5c0 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
1a5d0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
1a5e0 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
1a5f0 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
1a600 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
1a610 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1a620 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
1a630 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
1a640 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
1a650 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
1a660 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
1a670 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1a680 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
1a690 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
1a6a0 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
1a6b0 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
1a6c0 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
1a6d0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
1a6e0 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
1a6f0 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
1a700 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
1a710 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
1a720 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
1a730 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1a740 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1a750 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
1a760 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
1a770 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
1a780 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
1a790 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1a7a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a7b0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1a7c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1a7d0 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
1a7e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
1a7f0 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
1a800 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
1a810 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
1a820 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1a830 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
1a840 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1a850 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
1a860 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1a870 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
1a880 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1a890 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
1a8a0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1a8b0 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
1a8c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1a8d0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
1a8e0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a8f0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
1a900 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1a910 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
1a920 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
1a930 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1a940 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
1a950 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
1a960 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
1a970 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
1a980 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
1a990 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
1a9a0 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1a9b0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
1a9c0 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
1a9d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1a9e0 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  t2 */.  int iMet
1a9f0 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
1aa00 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
1aa10 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1aa20 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
1aa30 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
1aa40 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1aa50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1aa60 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
1aa70 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
1aa80 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1aa90 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1aaa0 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
1aab0 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
1aac0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1aad0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1aae0 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  b) );..  sqlite3
1aaf0 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
1ab00 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
1ab10 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
1ab20 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d  iMeta);.  pOut =
1ab30 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
1ab40 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
1ab50 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
1ab60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1ab70 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
1ab80 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1ab90 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65  * Write the inte
1aba0 67 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74  ger value P3 int
1abb0 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
1abc0 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
1abd0 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74  1..** P2==1 is t
1abe0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1abf0 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65  n.  P2==2 is the
1ac00 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1ac10 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68  ..** P2==3 is th
1ac20 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1ac30 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
1ac40 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1ac50 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
1ac60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1ac70 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1ac80 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
1ac90 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1aca0 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
1acb0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
1acc0 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
1acd0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
1ace0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1acf0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1ad00 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a  OP_SetCookie: {.
1ad10 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
1ad20 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1ad30 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1ad40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ad50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1ad60 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1ad70 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1ad80 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1ad90 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1ada0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1adb0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1adc0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1add0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1ade0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1adf0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1ae00 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1ae10 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1ae20 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1ae30 5f 4f 4d 49 54 5f 43 4f 4e 43 55 52 52 45 4e 54  _OMIT_CONCURRENT
1ae40 0a 20 20 69 66 28 20 64 62 2d 3e 62 43 6f 6e 63  .  if( db->bConc
1ae50 75 72 72 65 6e 74 20 0a 20 20 20 26 26 20 28 70  urrent .   && (p
1ae60 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 55 53  Op->p2==BTREE_US
1ae70 45 52 5f 56 45 52 53 49 4f 4e 20 7c 7c 20 70 4f  ER_VERSION || pO
1ae80 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 41 50 50  p->p2==BTREE_APP
1ae90 4c 49 43 41 54 49 4f 4e 5f 49 44 29 0a 20 20 29  LICATION_ID).  )
1aea0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1aeb0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
1aec0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
1aed0 20 22 63 61 6e 6e 6f 74 20 6d 6f 64 69 66 79 20   "cannot modify 
1aee0 25 73 20 77 69 74 68 69 6e 20 43 4f 4e 43 55 52  %s within CONCUR
1aef0 52 45 4e 54 20 74 72 61 6e 73 61 63 74 69 6f 6e  RENT transaction
1af00 22 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e  ",.        pOp->
1af10 70 32 3d 3d 42 54 52 45 45 5f 55 53 45 52 5f 56  p2==BTREE_USER_V
1af20 45 52 53 49 4f 4e 20 3f 20 22 75 73 65 72 5f 76  ERSION ? "user_v
1af30 65 72 73 69 6f 6e 22 20 3a 20 22 61 70 70 6c 69  ersion" : "appli
1af40 63 61 74 69 6f 6e 5f 69 64 22 0a 20 20 20 20 29  cation_id".    )
1af50 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1af60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1af70 20 7d 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 20 53   }.#endif.  /* S
1af80 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
1af90 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
1afa0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
1afb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1afc0 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
1afd0 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
1afe0 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66  , pOp->p3);.  if
1aff0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1b000 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
1b010 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
1b020 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1b030 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
1b040 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
1b050 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
1b060 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 62 43    assert( db->bC
1b070 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29 3b 0a  oncurrent==0 );.
1b080 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1b090 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
1b0a0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64  = pOp->p3;.    d
1b0b0 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
1b0c0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
1b0d0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1b0e0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c  p->p2==BTREE_FIL
1b0f0 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
1b100 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65  /* Record change
1b110 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f  s in the file fo
1b120 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d  rmat */.    pDb-
1b130 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1b140 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33 3b  ormat = pOp->p3;
1b150 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1b160 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
1b170 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
1b180 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1b190 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
1b1a0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
1b1b0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
1b1c0 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
1b1d0 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
1b1e0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
1b1f0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
1b200 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  ;.    p->expired
1b210 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1b220 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1b230 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b240 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b250 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
1b260 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1b270 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1b280 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1b290 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
1b2a0 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
1b2b0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
1b2c0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
1b2d0 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
1b2e0 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
1b2f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1b300 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
1b310 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
1b320 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
1b330 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
1b340 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
1b350 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
1b360 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
1b370 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
1b380 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
1b390 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
1b3a0 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
1b3b0 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
1b3c0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
1b3d0 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
1b3e0 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
1b3f0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
1b400 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
1b410 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
1b420 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
1b430 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
1b440 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
1b450 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
1b460 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f   then use the co
1b470 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1b480 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74  r P2 as the root
1b490 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68   page, not.** th
1b4a0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
1b4b0 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  self..**.** Ther
1b4c0 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64  e will be a read
1b4d0 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74   lock on the dat
1b4e0 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74  abase whenever t
1b4f0 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70  here is an.** op
1b500 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74  en cursor.  If t
1b510 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20  he database was 
1b520 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74  unlocked prior t
1b530 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  o this instructi
1b540 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61  on.** then a rea
1b550 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  d lock is acquir
1b560 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1b570 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1b580 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20   A read.** lock 
1b590 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f  allows other pro
1b5a0 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74  cesses to read t
1b5b0 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20  he database but 
1b5c0 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79  prohibits.** any
1b5d0 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66   other process f
1b5e0 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  rom modifying th
1b5f0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
1b600 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a   read lock is.**
1b610 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61   released when a
1b620 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63  ll cursors are c
1b630 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20  losed.  If this 
1b640 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65  instruction atte
1b650 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61  mpts.** to get a
1b660 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66   read lock but f
1b670 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74  ails, the script
1b680 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68   terminates with
1b690 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55   an.** SQLITE_BU
1b6a0 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  SY error code..*
1b6b0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1b6c0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1b6d0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1b6e0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1b6f0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1b700 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1b710 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1b720 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1b730 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1b740 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1b750 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1b760 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1b770 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1b780 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1b790 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1b7a0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1b7b0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1b7c0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1b7d0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1b7e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1b7f0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1b800 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1b810 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65  o: OpenWrite, Re
1b820 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70  openIdx.*/./* Op
1b830 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20  code: ReopenIdx 
1b840 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1b850 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1b860 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1b870 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f   The ReopenIdx o
1b880 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63  pcode works exac
1b890 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65  tly like ReadOpe
1b8a0 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  n except that it
1b8b0 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73   first.** checks
1b8c0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63   to see if the c
1b8d0 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61  ursor on P1 is a
1b8e0 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68  lready open with
1b8f0 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20   a root page.** 
1b900 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64  number of P2 and
1b910 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20 6f   if it is this o
1b920 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20  pcode becomes a 
1b930 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72  no-op.  In other
1b940 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68   words,.** if th
1b950 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65  e cursor is alre
1b960 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74  ady open, do not
1b970 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a   reopen it..**.*
1b980 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1b990 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20  opcode may only 
1b9a0 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35 3d  be used with P5=
1b9b0 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20 62  =0 and with P4 b
1b9c0 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59  eing.** a P4_KEY
1b9d0 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75  INFO object.  Fu
1b9e0 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50  rthermore, the P
1b9f0 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1ba00 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65  the same as.** e
1ba10 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65  very other Reope
1ba20 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64  nIdx or OpenRead
1ba30 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75   for the same cu
1ba40 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a  rsor number..**.
1ba50 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52  ** See the OpenR
1ba60 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d  ead opcode docum
1ba70 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64  entation for add
1ba80 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
1ba90 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
1baa0 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
1bab0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1bac0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1bad0 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
1bae0 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
1baf0 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
1bb00 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
1bb10 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1bb20 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
1bb30 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
1bb40 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1bb50 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
1bb60 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
1bb70 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
1bb80 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
1bb90 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
1bba0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
1bbb0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
1bbc0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1bbd0 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
1bbe0 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
1bbf0 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
1bc00 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
1bc10 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
1bc20 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
1bc30 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
1bc40 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
1bc50 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
1bc60 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
1bc70 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1bc80 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1bc90 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
1bca0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
1bcb0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1bcc0 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
1bcd0 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
1bce0 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
1bcf0 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
1bd00 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
1bd10 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
1bd20 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
1bd30 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
1bd40 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
1bd50 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
1bd60 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
1bd70 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
1bd80 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
1bd90 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
1bda0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
1bdb0 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
1bdc0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
1bdd0 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
1bde0 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
1bdf0 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
1be00 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
1be10 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69  ReopenIdx: {.  i
1be20 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
1be30 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1be40 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
1be50 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
1be60 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
1be70 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1be80 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
1be90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bea0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1beb0 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1bec0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1bed0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1bee0 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  NFO );.  pCur = 
1bef0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1bf00 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26  ];.  if( pCur &&
1bf10 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d   pCur->pgnoRoot=
1bf20 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b  =(u32)pOp->p2 ){
1bf30 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 75  .    assert( pCu
1bf40 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20  r->iDb==pOp->p3 
1bf50 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61  );      /* Guara
1bf60 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f 64  nteed by the cod
1bf70 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1bf80 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72     goto open_cur
1bf90 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20  sor_set_hints;. 
1bfa0 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63   }.  /* If the c
1bfb0 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72  ursor is not cur
1bfc0 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69  rently open or i
1bfd0 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66  s open on a diff
1bfe0 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78  erent.  ** index
1bff0 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1c000 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e  ugh into OP_Open
1c010 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20  Read to force a 
1c020 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f  reopen */.case O
1c030 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
1c040 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a   OP_OpenWrite:..
1c050 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1c060 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72  pcode==OP_OpenWr
1c070 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ite || pOp->p5==
1c080 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50  0 || pOp->p5==OP
1c090 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20  FLAG_SEEKEQ );. 
1c0a0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1c0b0 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
1c0c0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1c0d0 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70  OP_OpenRead || p
1c0e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52  Op->opcode==OP_R
1c0f0 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20  eopenIdx.       
1c100 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c     || p->readOnl
1c110 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  y==0 );..  if( p
1c120 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
1c130 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1c140 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20  RT_ROLLBACK;.   
1c150 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1c160 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  to_error;.  }.. 
1c170 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
1c180 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
1c190 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
1c1a0 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1c1b0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1c1c0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1c1d0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1c1e0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1c1f0 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44  sk, iDb) );.  pD
1c200 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1c210 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1c220 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1c230 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1c240 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1c250 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73  nWrite ){.    as
1c260 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52  sert( OPFLAG_FOR
1c270 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f  DELETE==BTREE_FO
1c280 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77  RDELETE );.    w
1c290 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52  rFlag = BTREE_WR
1c2a0 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26  CSR | (pOp->p5 &
1c2b0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
1c2c0 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  E);.    assert( 
1c2d0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1c2e0 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
1c2f0 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44  0) );.    if( pD
1c300 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1c310 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
1c320 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1c330 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
1c340 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
1c350 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1c360 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
1c370 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
1c380 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
1c390 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1c3a0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b  PFLAG_P2ISREG ){
1c3b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1c3c0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1c3d0 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20   p2<=(p->nMem+1 
1c3e0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
1c3f0 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  .    pIn2 = &aMe
1c400 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72  m[p2];.    asser
1c410 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
1c420 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  n2) );.    asser
1c430 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
1c440 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1c450 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1c460 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1c470 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69  n2);.    p2 = (i
1c480 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn2->u.i;.  
1c490 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75    /* The p2 valu
1c4a0 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66  e always comes f
1c4b0 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43  rom a prior OP_C
1c4c0 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64  reateTable opcod
1c4d0 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61  e and.    ** tha
1c4e0 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  t opcode will al
1c4f0 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20  ways set the p2 
1c500 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f  value to 2 or mo
1c510 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e  re or else fail.
1c520 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65  .    ** If there
1c530 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c   were a failure,
1c540 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
1c550 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
1c560 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a  ve halted.    **
1c570 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67   before reaching
1c580 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1c590 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  n. */.    assert
1c5a0 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20  ( p2>=2 );.  }. 
1c5b0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1c5c0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
1c5d0 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70      pKeyInfo = p
1c5e0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1c5f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1c600 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1c610 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  db) );.    asser
1c620 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1c630 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c  =db );.    nFiel
1c640 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  d = pKeyInfo->nF
1c650 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ield+pKeyInfo->n
1c660 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20  XField;.  }else 
1c670 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1c680 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20  =P4_INT32 ){.   
1c690 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1c6a0 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  4.i;.  }.  asser
1c6b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1c6c0 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
1c6d0 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61  d>=0 );.  testca
1c6e0 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b  se( nField==0 );
1c6f0 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20    /* Table with 
1c700 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1c710 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20  KEY and nothing 
1c720 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d  else */.  pCur =
1c730 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1c740 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
1c750 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45  ld, iDb, CURTYPE
1c760 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1c770 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1c780 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1c790 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1c7a0 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1c7b0 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f  ;.  pCur->pgnoRo
1c7c0 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66 20  ot = p2;.#ifdef 
1c7d0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
1c7e0 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77 72  Cur->wrFlag = wr
1c7f0 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20 72  Flag;.#endif.  r
1c800 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c810 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
1c820 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
1c830 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f   pCur->uc.pCurso
1c840 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1c850 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1c860 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1c870 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1c880 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69   variable. Previ
1c890 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
1c8a0 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
1c8b0 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
1c8c0 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
1c8d0 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
1c8e0 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
1c8f0 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
1c900 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
1c910 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
1c920 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
1c930 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
1c940 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
1c950 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
1c960 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
1c970 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
1c980 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f  _KEYINFO;..open_
1c990 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1c9a0 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  :.  assert( OPFL
1c9b0 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1c9c0 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1c9d0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53  assert( OPFLAG_S
1c9e0 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45  EEKEQ==BTREE_SEE
1c9f0 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63 61  K_EQ );.  testca
1ca00 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  se( pOp->p5 & OP
1ca10 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b 0a  FLAG_BULKCSR );.
1ca20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1ca30 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
1ca40 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  S.  testcase( pO
1ca50 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 53  p->p2 & OPFLAG_S
1ca60 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66 0a  EEKEQ );.#endif.
1ca70 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1ca80 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70 43  rsorHintFlags(pC
1ca90 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 0a  ur->uc.pCursor,.
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1cac0 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
1cad0 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47  G_BULKCSR|OPFLAG
1cae0 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69 66  _SEEKEQ)));.  if
1caf0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1cb00 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1cb10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1cb20 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d  pcode: OpenEphem
1cb30 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  eral P1 P2 * P4 
1cb40 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1cb50 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a  nColumn=P2.**.**
1cb60 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1cb70 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73  or P1 to a trans
1cb80 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  ient table..** T
1cb90 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77  he cursor is alw
1cba0 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f  ays opened read/
1cbb0 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a  write even if .*
1cbc0 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
1cbd0 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79  ase is read-only
1cbe0 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c  .  The ephemeral
1cbf0 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c  .** table is del
1cc00 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  eted automatical
1cc10 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73  ly when the curs
1cc20 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a  or is closed..**
1cc30 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
1cc40 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1cc50 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  in the ephemeral
1cc60 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1cc70 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
1cc80 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
1cc90 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
1cca0 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
1ccb0 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
1ccc0 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
1ccd0 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
1cce0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1ccf0 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
1cd00 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
1cd10 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
1cd20 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  dex..**.** The P
1cd30 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20  5 parameter can 
1cd40 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65  be a mask of the
1cd50 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64   BTREE_* flags d
1cd60 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72  efined.** in btr
1cd70 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61  ee.h.  These fla
1cd80 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63  gs control aspec
1cd90 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74  ts of the operat
1cda0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74  ion of.** the bt
1cdb0 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f  ree.  The BTREE_
1cdc0 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64  OMIT_JOURNAL and
1cdd0 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c   BTREE_SINGLE fl
1cde0 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64  ags are.** added
1cdf0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
1ce00 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
1ce10 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50  enAutoindex P1 P
1ce20 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
1ce30 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1ce40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1ce50 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  de works the sam
1ce60 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  e as OP_OpenEphe
1ce70 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61  meral.  It has a
1ce80 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61  .** different na
1ce90 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73  me to distinguis
1cea0 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c  h its use.  Tabl
1ceb0 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
1cec0 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f  .** by this opco
1ced0 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
1cee0 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  for automaticall
1cef0 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69  y created transi
1cf00 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69  ent.** indices i
1cf10 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65  n joins..*/.case
1cf20 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65   OP_OpenAutoinde
1cf30 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  x: .case OP_Open
1cf40 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56  Ephemeral: {.  V
1cf50 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1cf60 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1cf70 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  nfo;..  static c
1cf80 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67  onst int vfsFlag
1cf90 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54  s = .      SQLIT
1cfa0 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
1cfb0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1cfc0 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20  OPEN_CREATE |.  
1cfd0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1cfe0 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
1cff0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45    SQLITE_OPEN_DE
1d000 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20  LETEONCLOSE |.  
1d010 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1d020 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20  TRANSIENT_DB;.  
1d030 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1d040 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1d050 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1d060 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1d070 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1d080 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55   pOp->p2, -1, CU
1d090 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1d0a0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1d0b0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1d0c0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1d0d0 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c  pCx->isEphemeral
1d0e0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 1;.  rc = sql
1d0f0 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62  ite3BtreeOpen(db
1d100 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26  ->pVfs, 0, db, &
1d110 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20  pCx->pBt, .     
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d130 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
1d140 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
1d150 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20  NGLE | pOp->p5, 
1d160 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28  vfsFlags);.  if(
1d170 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1d180 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
1d190 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e  e3BtreeBeginTran
1d1a0 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a  s(pCx->pBt, 1);.
1d1b0 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1d1c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1d1d0 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1d1e0 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1d1f0 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1d200 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1d210 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1d220 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1d230 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1d240 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1d250 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1d260 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1d270 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1d280 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1d290 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1d2a0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1d2b0 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1d2c0 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1d2d0 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1d2e0 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79 49  /.    if( (pKeyI
1d2f0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1d300 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20  eyInfo)!=0 ){.  
1d310 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1d320 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1d330 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1d340 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1d350 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1d360 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1d370 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45  Bt, &pgno, BTREE
1d380 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e  _BLOBKEY | pOp->
1d390 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20  p5); .      if( 
1d3a0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1d3b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1d3c0 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f   pgno==MASTER_RO
1d3d0 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20  OT+1 );.        
1d3e0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1d3f0 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1d400 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1d410 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1d420 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43  b) );.        pC
1d430 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  x->pKeyInfo = pK
1d440 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20  eyInfo;.        
1d450 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d460 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1d470 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52  , pgno, BTREE_WR
1d480 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CSR,.           
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70       pKeyInfo, p
1d4b0 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1d4c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
1d4d0 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b  Cx->isTable = 0;
1d4e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1d4f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d500 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1d510 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c  Bt, MASTER_ROOT,
1d520 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20   BTREE_WRCSR,.  
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d540 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70              0, p
1d550 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1d560 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1d570 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1d580 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1d590 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d5a0 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73  error;.  pCx->is
1d5b0 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e  Ordered = (pOp->
1d5c0 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45  p5!=BTREE_UNORDE
1d5d0 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  RED);.  break;.}
1d5e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
1d5f0 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33  terOpen P1 P2 P3
1d600 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1d610 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69   opcode works li
1d620 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  ke OP_OpenEpheme
1d630 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20  ral except that 
1d640 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72  it opens.** a tr
1d650 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68  ansient index th
1d660 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c  at is specifical
1d670 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73  ly designed to s
1d680 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62  ort large.** tab
1d690 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74  les using an ext
1d6a0 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74  ernal merge-sort
1d6b0 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a   algorithm..**.*
1d6c0 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33  * If argument P3
1d6d0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1d6e0 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20  en it indicates 
1d6f0 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20  that the sorter 
1d700 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68  may.** assume th
1d710 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74  at a stable sort
1d720 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65   considering the
1d730 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73   first P3 fields
1d740 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20   of each.** key 
1d750 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f  is sufficient to
1d760 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71   produce the req
1d770 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a  uired results..*
1d780 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
1d790 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
1d7a0 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1d7b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d7c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d7d0 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1d7e0 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1d7f0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1d800 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54  Op->p2, -1, CURT
1d810 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69  YPE_SORTER);.  i
1d820 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1d830 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1d840 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1d850 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
1d860 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1d870 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1d880 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1d890 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1d8a0 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20  C(db) );.  rc = 
1d8b0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
1d8c0 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70  rInit(db, pOp->p
1d8d0 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72  3, pCx);.  if( r
1d8e0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1d8f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
1d900 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1d910 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74  de: SequenceTest
1d920 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1d930 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75  Synopsis: if( cu
1d940 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29  rsor[P1].ctr++ )
1d950 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50   pc = P2.**.** P
1d960 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
1d970 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71  rsor. If the seq
1d980 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73  uence counter is
1d990 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c   currently zero,
1d9a0 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20   jump.** to P2. 
1d9b0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
1d9c0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
1d9d0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
1d9e0 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  increment the.**
1d9f0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61   the sequence va
1da00 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
1da10 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a  SequenceTest: {.
1da20 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1da30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1da40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1da50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1da60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1da70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1da80 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
1da90 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73   );.  if( (pC->s
1daa0 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b  eqCount++)==0 ){
1dab0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
1dac0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
1dad0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1dae0 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50   OpenPseudo P1 P
1daf0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1db00 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73  psis: P3 columns
1db10 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20   in r[P2].**.** 
1db20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1db30 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f  r that points to
1db40 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68   a fake table th
1db50 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  at contains a si
1db60 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64  ngle.** row of d
1db70 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  ata.  The conten
1db80 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f  t of that one ro
1db90 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  w is the content
1dba0 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65   of memory.** re
1dbb0 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f  gister P2.  In o
1dbc0 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73  ther words, curs
1dbd0 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e  or P1 becomes an
1dbe0 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a   alias for the .
1dbf0 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74  ** MEM_Blob cont
1dc00 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ent contained in
1dc10 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1dc20 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62  .** A pseudo-tab
1dc30 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
1dc40 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
1dc50 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67  d to hold a sing
1dc60 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74  le.** row output
1dc70 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72   from the sorter
1dc80 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77   so that the row
1dc90 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73   can be decompos
1dca0 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76  ed into.** indiv
1dcb0 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73  idual columns us
1dcc0 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d  ing the OP_Colum
1dcd0 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f  n opcode.  The O
1dce0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a  P_Column opcode.
1dcf0 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  ** is the only c
1dd00 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61  ursor opcode tha
1dd10 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70  t works with a p
1dd20 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
1dd30 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d  ** P3 is the num
1dd40 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1dd50 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61   the records tha
1dd60 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  t will be stored
1dd70 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64   by.** the pseud
1dd80 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
1dd90 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20   OP_OpenPseudo: 
1dda0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1ddb0 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pCx;..  assert( 
1ddc0 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1ddd0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
1dde0 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1ddf0 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1de00 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33  pOp->p1, pOp->p3
1de10 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53  , -1, CURTYPE_PS
1de20 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78  EUDO);.  if( pCx
1de30 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1de40 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1de50 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63  w = 1;.  pCx->uc
1de60 2e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20  .pseudoTableReg 
1de70 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78  = pOp->p2;.  pCx
1de80 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1de90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1dea0 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
1deb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
1dec0 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
1ded0 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
1dee0 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
1def0 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
1df00 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
1df10 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
1df20 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
1df30 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
1df40 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
1df50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1df60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1df70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
1df80 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
1df90 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
1dfa0 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
1dfb0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
1dfc0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
1dfd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1dfe0 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45  NABLE_COLUMN_USE
1dff0 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65  D_MASK./* Opcode
1e000 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31  : ColumnsUsed P1
1e010 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
1e020 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69  This opcode (whi
1e030 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69  ch only exists i
1e040 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d  f SQLite was com
1e050 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51  piled with.** SQ
1e060 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1e070 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64  MN_USED_MASK) id
1e080 65 6e 74 69 66 69 65 73 20 77 68 69 63 68 20 63  entifies which c
1e090 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a  olumns of the.**
1e0a0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1e0b0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61 72  for cursor P1 ar
1e0c0 65 20 75 73 65 64 2e 20 20 50 34 20 69 73 20 61  e used.  P4 is a
1e0d0 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
1e0e0 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e  ** (P4_INT64) in
1e0f0 20 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74   which the first
1e100 20 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65   63 bits are one
1e110 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
1e120 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c  .** first 63 col
1e130 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
1e140 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20  e or index that 
1e150 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65  are actually use
1e160 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73  d.** by the curs
1e170 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72  or.  The high-or
1e180 64 65 72 20 62 69 74 20 69 73 20 73 65 74 20 69  der bit is set i
1e190 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74  f any column aft
1e1a0 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69  er.** the 64th i
1e1b0 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  s used..*/.case 
1e1c0 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20  OP_ColumnsUsed: 
1e1d0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1e1e0 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  pC;.  pC = p->ap
1e1f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1e200 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
1e210 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1e220 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73  REE );.  pC->mas
1e230 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70  kUsed = *(u64*)p
1e240 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
1e250 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
1e260 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1e270 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
1e280 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1e290 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1e2a0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e2b0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1e2c0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1e2d0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1e2e0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1e2f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1e300 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79  er P3 as the key
1e310 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  .  If cursor P1 
1e320 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1e330 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1e340 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1e350 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1e360 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1e370 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1e380 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1e390 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1e3a0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1e3b0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1e3c0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1e3d0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1e3e0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1e3f0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1e400 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1e410 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1e420 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
1e430 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1e440 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1e450 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1e460 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1e470 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
1e480 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
1e490 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1e4a0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
1e4b0 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
1e4c0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1e4d0 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
1e4e0 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
1e4f0 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
1e500 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
1e510 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1e520 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
1e530 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
1e540 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
1e550 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
1e560 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
1e570 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xLE opcode with 
1e580 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
1e590 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45  ts..** The IdxLE
1e5a0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1e5b0 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
1e5c0 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
1e5d0 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c   but the.** IdxL
1e5e0 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1e5f0 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
1e600 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
1e610 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ons..**.** This 
1e620 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1e630 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1e640 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1e650 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1e660 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1e670 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1e680 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1e690 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1e6a0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1e6b0 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1e6c0 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1e6d0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1e6e0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1e6f0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
1e700 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1e710 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34  ekGT P1 P2 P3 P4
1e720 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e730 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1e740 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1e750 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1e760 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1e770 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1e780 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1e790 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1e7a0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1e7b0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1e7c0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1e7d0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1e7e0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1e7f0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1e800 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1e810 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1e820 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1e830 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1e840 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1e850 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1e860 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
1e870 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
1e880 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
1e890 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
1e8a0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1e8b0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
1e8c0 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
1e8d0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1e8e0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1e8f0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1e900 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1e910 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1e920 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1e930 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
1e940 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1e950 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
1e960 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
1e970 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1e980 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1e990 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
1e9a0 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
1e9b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1e9c0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1e9d0 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
1e9e0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1e9f0 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50  ode: SeekLT P1 P
1ea00 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79  2 P3 P4 * .** Sy
1ea10 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1ea20 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1ea30 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1ea40 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1ea50 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1ea60 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1ea70 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1ea80 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1ea90 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1eaa0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1eab0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1eac0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1ead0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1eae0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1eaf0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1eb00 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1eb10 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1eb20 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1eb30 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1eb40 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1eb50 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1eb60 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1eb70 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
1eb80 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1eb90 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1eba0 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
1ebb0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1ebc0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1ebd0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1ebe0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1ebf0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1ec00 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1ec10 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1ec20 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1ec30 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1ec40 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1ec50 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1ec60 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1ec70 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1ec80 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1ec90 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1eca0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1ecb0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1ecc0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1ecd0 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20  code: SeekLE P1 
1ece0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1ecf0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1ed00 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1ed10 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1ed20 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1ed30 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1ed40 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1ed50 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1ed60 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1ed70 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1ed80 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1ed90 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1eda0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1edb0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1edc0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1edd0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1ede0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1edf0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1ee00 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1ee10 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1ee20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1ee30 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1ee40 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1ee50 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1ee60 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1ee70 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1ee80 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1ee90 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1eea0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1eeb0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1eec0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1eed0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1eee0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1eef0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1ef00 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
1ef10 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
1ef20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
1ef30 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
1ef40 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
1ef50 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1ef60 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1ef70 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
1ef80 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   Next..**.** If 
1ef90 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61  the cursor P1 wa
1efa0 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74  s opened using t
1efb0 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  he OPFLAG_SEEKEQ
1efc0 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73   flag, then this
1efd0 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  .** opcode will 
1efe0 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61  always land on a
1eff0 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75   record that equ
1f000 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20  ally equals the 
1f010 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20  key, or.** else 
1f020 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1f030 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68   to P2.  When th
1f040 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c  e cursor is OPFL
1f050 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a  AG_SEEKEQ, this.
1f060 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62  ** opcode must b
1f070 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  e followed by an
1f080 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69   IdxGE opcode wi
1f090 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75  th the same argu
1f0a0 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64  ments..** The Id
1f0b0 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xGE opcode will 
1f0c0 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68  be skipped if th
1f0d0 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65  is opcode succee
1f0e0 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49  ds, but the.** I
1f0f0 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxGE opcode will
1f100 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73   be used on subs
1f110 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72  equent loop iter
1f120 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  ations..**.** Se
1f130 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1f140 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
1f150 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a   SeekGe, SeekLt.
1f160 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1f170 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  T:         /* ju
1f180 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1f190 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20  OP_SeekLE:      
1f1a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f1b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1f1c0 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
1f1d0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1f1e0 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20  OP_SeekGT: {    
1f1f0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f200 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
1f210 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61          /* Compa
1f220 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a  rison result */.
1f230 20 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20    int oc;       
1f240 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a       /* Opcode *
1f250 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1f260 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75  pC;    /* The cu
1f270 72 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a  rsor to seek */.
1f280 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
1f290 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20   r;  /* The key 
1f2a0 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20  to seek for */. 
1f2b0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
1f2c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f2d0 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c   columns or fiel
1f2e0 64 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f  ds in the key */
1f2f0 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1f300 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77        /* The row
1f310 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65  id we are to see
1f320 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71  k to */.  int eq
1f330 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  Only;        /* 
1f340 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20  Only interested 
1f350 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f  in == results */
1f360 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1f370 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1f380 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
1f390 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f3a0 32 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70  2!=0 );.  pC = p
1f3b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f3c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f3d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1f3e0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
1f3f0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
1f400 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1f410 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31  E == OP_SeekLT+1
1f420 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1f430 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65  _SeekGE == OP_Se
1f440 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65  ekLT+2 );.  asse
1f450 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d  rt( OP_SeekGT ==
1f460 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a   OP_SeekLT+3 );.
1f470 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1f480 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
1f490 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
1f4a0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d  sor!=0 );.  oc =
1f4b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
1f4c0 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43  eqOnly = 0;.  pC
1f4d0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23  ->nullRow = 0;.#
1f4e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1f4f0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
1f500 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23  = pOp->opcode;.#
1f510 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d  endif..  if( pC-
1f520 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
1f530 2f 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45 45  /* The BTREE_SEE
1f540 4b 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c  K_EQ flag is onl
1f550 79 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63  y set on index c
1f560 75 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73  ursors */.    as
1f570 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
1f580 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28  eeCursorHasHint(
1f590 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
1f5a0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d  BTREE_SEEK_EQ)==
1f5b0 30 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  0 );..    /* The
1f5c0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
1f5d0 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
1f5e0 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
1f5f0 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
1f600 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
1f610 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
1f620 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
1f630 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
1f640 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65  an do.    ** the
1f650 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72   seek, so conver
1f660 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e  t it. */.    pIn
1f670 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1f680 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  3];.    if( (pIn
1f690 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
1f6a0 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
1f6b0 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
1f6c0 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ){.      applyNu
1f6d0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
1f6e0 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  n3, 0);.    }.  
1f6f0 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1f700 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1f710 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74  3);..    /* If t
1f720 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
1f730 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
1f740 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
1f750 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a  er without.    *
1f760 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
1f770 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
1f780 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
1f790 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
1f7a0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
1f7b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1f7c0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
1f7d0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1f7e0 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
1f7f0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
1f800 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f  e P3 value canno
1f810 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
1f820 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20  nto any kind of 
1f830 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20  a number,.      
1f840 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65    ** then the se
1f850 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  ek is not possib
1f860 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50  le, so jump to P
1f870 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62  2 */.        Vdb
1f880 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
1f890 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f  ); goto jump_to_
1f8a0 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  p2;.        brea
1f8b0 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  k;.      }..    
1f8c0 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1f8d0 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1f8e0 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  s larger than th
1f8f0 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
1f900 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
1f910 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e  rm, substitute >
1f920 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f  = for > and < fo
1f930 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68  r <=. e.g. if th
1f940 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20  e search term.  
1f950 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e      ** is 4.9 an
1f960 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70  d the integer ap
1f970 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20  proximation 5:. 
1f980 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
1f990 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e          (x >  4.
1f9a0 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
1f9b0 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20  >= 5).      **  
1f9c0 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29        (x <= 4.9)
1f9d0 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20      ->     (x < 
1f9e0 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20   5).      */.   
1f9f0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72     if( pIn3->u.r
1fa00 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  <(double)iKey ){
1fa10 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1fa20 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f   OP_SeekGE==(OP_
1fa30 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20  SeekGT-1) );.   
1fa40 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
1fa50 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLT==(OP_Seek
1fa60 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LE-1) );.       
1fa70 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
1fa80 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLE & 0x0001)==(
1fa90 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
1faa0 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
1fab0 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
1fac0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
1fad0 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20  x0001) ) oc--;. 
1fae0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1faf0 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1fb00 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d  ation iKey is sm
1fb10 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61  aller than the a
1fb20 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
1fb30 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
1fb40 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66   substitute <= f
1fb50 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e  or < and > for >
1fb60 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73  =.  */.      els
1fb70 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e  e if( pIn3->u.r>
1fb80 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
1fb90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fba0 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53  OP_SeekLE==(OP_S
1fbb0 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20  eekLT+1) );.    
1fbc0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
1fbd0 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGT==(OP_SeekG
1fbe0 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E+1) );.        
1fbf0 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
1fc00 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LT & 0x0001)==(O
1fc10 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30  P_SeekGE & 0x000
1fc20 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
1fc30 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
1fc40 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78  =(OP_SeekLT & 0x
1fc50 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20  0001) ) oc++;.  
1fc60 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20      }.    } .   
1fc70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1fc80 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
1fc90 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
1fca0 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
1fcb0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
1fcc0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
1fcd0 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
1fce0 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
1fcf0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1fd00 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
1fd10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1fd20 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
1fd30 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  else{.    /* For
1fd40 20 61 20 63 75 72 73 6f 72 20 77 69 74 68 20 74   a cursor with t
1fd50 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
1fd60 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20   hint, only the 
1fd70 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20  OP_SeekGE and.  
1fd80 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f    ** OP_SeekLE o
1fd90 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77  pcodes are allow
1fda0 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75  ed, and these mu
1fdb0 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c  st be immediatel
1fdc0 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a  y followed.    *
1fdd0 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54  * by an OP_IdxGT
1fde0 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63   or OP_IdxLT opc
1fdf0 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ode, respectivel
1fe00 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  y, with the same
1fe10 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20   key..    */.   
1fe20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
1fe30 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
1fe40 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42  C->uc.pCursor, B
1fe50 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b  TREE_SEEK_EQ) ){
1fe60 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20  .      eqOnly = 
1fe70 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
1fe80 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1fe90 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e  _SeekGE || pOp->
1fea0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c  opcode==OP_SeekL
1feb0 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
1fec0 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
1fed0 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
1fee0 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
1fef0 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20 20 61  IdxGT );.      a
1ff00 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31  ssert( pOp[1].p1
1ff10 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20  ==pOp[0].p1 );. 
1ff20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1ff30 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p2==pOp[0].p
1ff40 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
1ff50 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f  t( pOp[1].p3==pO
1ff60 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20  p[0].p3 );.     
1ff70 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1ff80 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e  p4.i==pOp[0].p4.
1ff90 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i );.    }..    
1ffa0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1ffb0 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  .i;.    assert( 
1ffc0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1ffd0 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73  INT32 );.    ass
1ffe0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
1fff0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
20000 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
20010 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
20020 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
20030 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e   /* The next lin
20040 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74  e of code comput
20050 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f  es as follows, o
20060 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20  nly faster:.    
20070 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
20080 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGT || oc==OP
20090 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a  _SeekLE ){.    *
200a0 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
200b0 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20  rc = -1;.    ** 
200c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20    }else{.    ** 
200d0 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
200e0 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = +1;.    **   
200f0 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64  }.    */.    r.d
20100 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20  efault_rc = ((1 
20110 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c  & (oc - OP_SeekL
20120 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a  T)) ? -1 : +1);.
20130 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
20140 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64  OP_SeekGT || r.d
20150 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
20160 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
20170 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e  =OP_SeekLE || r.
20180 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
20190 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
201a0 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72  !=OP_SeekGE || r
201b0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
201c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
201d0 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c!=OP_SeekLT || 
201e0 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
201f0 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
20200 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
20210 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
20220 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
20230 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
20240 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
20250 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
20260 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
20270 0a 23 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61  .#endif.    Expa
20280 6e 64 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a  ndBlob(r.aMem);.
20290 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30      r.eqSeen = 0
202a0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
202b0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
202c0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
202d0 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
202e0 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
202f0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20300 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20310 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20320 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f     }.    if( eqO
20330 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d  nly && r.eqSeen=
20340 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
20350 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20  rt( res!=0 );.  
20360 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f      goto seek_no
20370 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20  t_found;.    }. 
20380 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65   }.  pC->deferre
20390 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
203a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
203b0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
203c0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
203d0 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
203e0 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
203f0 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53  f.  if( oc>=OP_S
20400 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74  eekGE ){  assert
20410 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc==OP_SeekGE 
20420 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  || oc==OP_SeekGT
20430 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c   );.    if( res<
20440 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
20450 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29  oc==OP_SeekGT) )
20460 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
20470 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
20480 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d  te3BtreeNext(pC-
20490 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
204a0 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
204b0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
204c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
204d0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
204e0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
204f0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
20500 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
20510 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d  OP_SeekLT || oc=
20520 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
20530 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
20540 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
20550 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20  _SeekLT) ){.    
20560 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
20570 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20580 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75  eePrevious(pC->u
20590 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
205a0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
205b0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
205c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
205d0 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
205e0 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
205f0 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
20600 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
20610 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
20620 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65  k to.      ** se
20630 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
20640 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   case..      */.
20650 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
20660 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
20670 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
20680 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f   }.  }.seek_not_
20690 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28  found:.  assert(
206a0 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
206b0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
206c0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
206d0 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f   res ){.    goto
206e0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
206f0 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20  else if( eqOnly 
20700 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
20710 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
20720 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
20730 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
20740 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20  T );.    pOp++; 
20750 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49  /* Skip the OP_I
20760 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54  dxLt or OP_IdxGT
20770 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f   that follows */
20780 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
20790 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46    ../* Opcode: F
207a0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
207b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
207c0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
207d0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
207e0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
207f0 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
20800 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
20810 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
20820 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
20830 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
20840 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
20850 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
20860 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
20870 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
20880 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
20890 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
208a0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
208b0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
208c0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
208d0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
208e0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
208f0 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
20900 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
20910 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
20920 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
20930 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
20940 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20950 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
20960 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  re it can be.** 
20970 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20  advanced in the 
20980 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f  forward directio
20990 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73  n.  The Next ins
209a0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f  truction will wo
209b0 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74  rk,.** but not t
209c0 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  he Prev instruct
209d0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
209e0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
209f0 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78  oConflict, NotEx
20a00 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a  ists. SeekGe.*/.
20a10 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
20a20 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
20a30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
20a40 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
20a50 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
20a60 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
20a70 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
20a80 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
20a90 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
20aa0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
20ab0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
20ac0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
20ad0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
20ae0 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
20af0 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
20b00 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
20b10 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
20b20 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
20b30 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
20b40 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
20b50 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
20b60 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
20b70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
20b80 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
20b90 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
20ba0 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
20bb0 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
20bc0 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
20bd0 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
20be0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
20bf0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
20c00 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
20c10 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
20c20 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
20c30 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
20c40 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
20c50 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
20c60 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
20c70 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
20c80 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
20c90 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
20ca0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
20cb0 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
20cc0 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
20cd0 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
20ce0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
20cf0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
20d00 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
20d10 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
20d20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
20d30 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
20d40 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
20d50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
20d60 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
20d70 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
20d80 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
20d90 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
20da0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
20db0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
20dc0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
20dd0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
20de0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
20df0 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
20e00 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
20e10 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
20e20 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
20e30 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
20e40 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
20e50 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
20e60 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
20e70 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
20e80 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
20e90 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
20ea0 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
20eb0 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
20ec0 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
20ed0 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
20ee0 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
20ef0 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
20f00 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
20f10 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
20f20 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
20f30 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
20f40 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
20f50 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
20f60 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
20f70 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
20f80 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
20f90 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
20fa0 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
20fb0 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
20fc0 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
20fd0 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
20fe0 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
20ff0 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
21000 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
21010 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
21020 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  NULL..**.** This
21030 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
21040 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
21050 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
21060 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
21070 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
21080 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
21090 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
210a0 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
210b0 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
210c0 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
210d0 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
210e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
210f0 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74  ound, Found, Not
21100 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f  Exists.*/.case O
21110 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20  P_NoConflict:   
21120 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
21130 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
21140 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
21150 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
21160 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
21170 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
21180 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  /.  int alreadyE
21190 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b  xists;.  int tak
211a0 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b  eJump;.  int ii;
211b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
211c0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
211d0 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55  char *pFree;.  U
211e0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
211f0 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
21200 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68  edRecord r;.  ch
21210 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e  ar aTempRec[ROUN
21220 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b  D8(sizeof(Unpack
21230 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a  edRecord)) + siz
21240 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b  eof(Mem)*4 + 7];
21250 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21260 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e  TEST.  if( pOp->
21270 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e  opcode!=OP_NoCon
21280 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f  flict ) sqlite3_
21290 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  found_count++;.#
212a0 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28  endif..  assert(
212b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
212c0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
212d0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
212e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
212f0 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
21300 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21310 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
21320 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
21330 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
21340 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
21350 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49  ode;.#endif.  pI
21360 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
21370 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
21380 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
21390 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
213a0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
213b0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
213c0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
213d0 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65  le==0 );.  pFree
213e0 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
213f0 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72  >p4.i>0 ){.    r
21400 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
21410 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
21420 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
21430 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61  p->p4.i;.    r.a
21440 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20  Mem = pIn3;.    
21450 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
21460 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
21470 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
21480 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
21490 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45 78 70  i]) );.      Exp
214a0 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b  andBlob(&r.aMem[
214b0 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ii]);.#ifdef SQL
214c0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20  ITE_DEBUG.      
214d0 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54 45  if( ii ) REGISTE
214e0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b  R_TRACE(pOp->p3+
214f0 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  ii, &r.aMem[ii])
21500 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20  ;.#endif.    }. 
21510 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b     pIdxKey = &r;
21520 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
21530 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56  dxKey = sqlite3V
21540 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64  dbeAllocUnpacked
21550 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20  Record(.        
21560 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54  pC->pKeyInfo, aT
21570 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61  empRec, sizeof(a
21580 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65  TempRec), &pFree
21590 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28 20  .    );.    if( 
215a0 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74  pIdxKey==0 ) got
215b0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
215c0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
215d0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
215e0 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70      ExpandBlob(p
215f0 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  In3);.    sqlite
21600 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
21610 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
21620 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
21630 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
21640 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
21650 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b  lt_rc = 0;.  tak
21660 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28  eJump = 0;.  if(
21670 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
21680 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
21690 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
216a0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
216b0 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
216c0 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
216d0 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
216e0 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
216f0 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
21700 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
21710 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
21720 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
21730 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46  ; ii<pIdxKey->nF
21740 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
21750 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e     if( pIdxKey->
21760 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
21770 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
21780 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20       takeJump = 
21790 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;.        break
217a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
217b0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
217c0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
217d0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
217e0 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
217f0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 73 71  , 0, &res);.  sq
21800 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
21810 70 46 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63  pFree);.  if( rc
21820 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
21830 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
21840 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
21850 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
21860 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64   = res;.  alread
21870 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
21880 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  0);.  pC->nullRo
21890 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69  w = 1-alreadyExi
218a0 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  sts;.  pC->defer
218b0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
218c0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
218d0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
218e0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
218f0 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
21900 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21910 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
21920 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
21930 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
21940 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
21950 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
21960 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61  beBranchTaken(ta
21970 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45  keJump||alreadyE
21980 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20  xists==0,2);.   
21990 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c   if( takeJump ||
219a0 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
219b0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
219c0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
219d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
219e0 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
219f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
21a00 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
21a10 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
21a20 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
21a30 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
21a40 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
21a50 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
21a60 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
21a70 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
21a80 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
21a90 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
21aa0 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
21ab0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
21ac0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c  tely to P2.  Or,
21ad0 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
21ae0 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  se an.** SQLITE_
21af0 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49  CORRUPT error. I
21b00 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69  f P1 does contai
21b10 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
21b20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
21b30 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
21b40 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
21b50 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
21b60 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
21b70 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
21b80 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
21b90 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
21ba0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
21bb0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
21bc0 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
21bd0 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
21be0 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
21bf0 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
21c00 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
21c10 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
21c20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
21c30 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
21c40 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
21c50 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
21c60 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
21c70 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
21c80 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
21c90 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
21ca0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
21cb0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
21cc0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
21cd0 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65  Conflict.*/.case
21ce0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b   OP_NotExists: {
21cf0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
21d00 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75   in3 */.  VdbeCu
21d10 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21d20 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
21d30 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b  nt res;.  u64 iK
21d40 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61  ey;..  pIn3 = &a
21d50 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21d60 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
21d70 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
21d80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21d90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21da0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21db0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21dc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21dd0 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64  t( pC!=0 );.#ifd
21de0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
21df0 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30    pC->seekOp = 0
21e00 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72  ;.#endif.  asser
21e10 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
21e20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21e30 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
21e40 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
21e50 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
21e60 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
21e70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
21e80 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
21e90 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
21ea0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
21eb0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
21ec0 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
21ed0 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
21ee0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
21ef0 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d   res==0 );.  pC-
21f00 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
21f10 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
21f20 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
21f30 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
21f40 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
21f50 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
21f60 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  E;.  pC->deferre
21f70 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56  dMoveto = 0;.  V
21f80 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
21f90 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e  es!=0,2);.  pC->
21fa0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
21fb0 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
21fc0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
21fd0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
21fe0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
21ff0 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
22000 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
22010 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
22020 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
22030 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
22040 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
22050 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22060 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
22070 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
22080 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
22090 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
220a0 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
220b0 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
220c0 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
220d0 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
220e0 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
220f0 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
22100 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
22110 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
22120 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
22130 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
22140 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
22150 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
22160 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
22170 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
22180 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
22190 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
221a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
221b0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
221c0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
221d0 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
221e0 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
221f0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
22200 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54  [pOp->p1]->eCurT
22210 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
22220 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  B );.  pOut = ou
22230 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
22240 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
22250 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
22260 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
22270 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
22280 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
22290 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
222a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
222b0 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
222c0 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
222d0 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
222e0 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
222f0 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
22300 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
22310 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
22320 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
22330 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
22340 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
22350 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
22360 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
22370 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
22380 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
22390 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
223a0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
223b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
223c0 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
223d0 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
223e0 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
223f0 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
22400 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
22410 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
22420 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
22430 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
22440 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
22450 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
22460 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
22470 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
22480 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
22490 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20  maximum, .** an 
224a0 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
224b0 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
224c0 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
224d0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
224e0 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
224f0 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
22500 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
22510 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
22520 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
22530 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
22540 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
22550 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
22560 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
22570 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b  out2 */.  i64 v;
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
225a0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
225b0 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
225c0 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
225d0 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
225e0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
225f0 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
22600 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
22610 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
22620 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
22630 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
22640 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
22650 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
22660 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
22670 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
22680 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
22690 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
226a0 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
226b0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
226c0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
226d0 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
226e0 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
226f0 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
22700 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f   = 0;.  pOut = o
22710 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
22720 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
22730 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22740 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22750 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
22760 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22770 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22780 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22790 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
227a0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
227b0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
227c0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20  sor!=0 );.  {.  
227d0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
227e0 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
227f0 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
22800 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
22810 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
22820 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
22830 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
22840 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
22850 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
22860 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
22870 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
22880 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
22890 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
228a0 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
228b0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
228c0 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
228d0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
228e0 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
228f0 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
22900 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
22910 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
22920 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
22930 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
22940 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
22950 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
22960 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
22970 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
22980 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
22990 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
229a0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
229b0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
229c0 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
229d0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
229e0 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
229f0 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
22a00 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
22a10 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
22a20 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
22a30 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
22a40 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
22a50 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
22a60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
22a70 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
22a80 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
22a90 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
22aa0 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
22ab0 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
22ac0 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
22ad0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
22ae0 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
22af0 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
22b00 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
22b10 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
22b20 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
22b30 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
22b40 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
22b50 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
22b60 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
22b70 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
22b80 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
22b90 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
22ba0 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
22bb0 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
22bc0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
22bd0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
22be0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
22bf0 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
22c00 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
22c10 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
22c20 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
22c30 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
22c40 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
22c50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
22c60 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
22c70 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
22c80 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
22c90 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
22ca0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
22cb0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
22cc0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
22cd0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
22ce0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29  C->uc.pCursor) )
22cf0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
22d00 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
22d10 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ze(pC->uc.pCurso
22d20 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  r, &v);.        
22d30 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
22d40 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43 61  TE_OK );   /* Ca
22d50 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f 77  nnot fail follow
22d60 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29 20  ing BtreeLast() 
22d70 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  */.        if( v
22d80 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
22d90 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
22da0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
22db0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
22dc0 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
22dd0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
22de0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
22df0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
22e00 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
22e10 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
22e20 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
22e30 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
22e40 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
22e50 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
22e60 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
22e70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
22e80 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
22e90 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
22ea0 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
22eb0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
22ec0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
22ed0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
22ee0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
22ef0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
22f00 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
22f10 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
22f20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22f30 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
22f40 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
22f50 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
22f60 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
22f70 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
22f80 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
22f90 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
22fa0 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
22fb0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
22fc0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
22fd0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
22fe0 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
22ff0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
23000 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
23010 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
23020 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
23030 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
23040 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  lid(pMem) );..  
23050 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
23060 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
23070 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
23080 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
23090 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61  y(pMem);.      a
230a0 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
230b0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
230c0 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
230d0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
230e0 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  r */.      if( p
230f0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
23100 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
23110 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
23120 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
23130 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
23140 20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a   R-12275-61338 *
23150 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
23160 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23170 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
23180 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
23190 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  +1 ){.        v 
231a0 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
231b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
231c0 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
231d0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69    }.#endif.    i
231e0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
231f0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
23200 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
23210 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
23220 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
23230 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
23240 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
23250 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
23260 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
23270 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
23280 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
23290 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
232a0 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
232b0 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
232c0 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
232d0 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
232e0 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
232f0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
23300 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
23310 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
23320 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
23330 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
23340 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
23350 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
23380 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
23390 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63  able. */.      c
233a0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f  nt = 0;.      do
233b0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
233c0 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
233d0 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
233e0 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
233f0 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20  OWID>>1); v++;  
23400 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76  /* Ensure that v
23410 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
23420 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d   zero */.      }
23430 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73  while(  ((rc = s
23440 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
23450 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
23460 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
23470 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
234b0 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
234c0 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
234d0 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
234e0 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b  && (++cnt<100));
234f0 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29 20  .      if( rc ) 
23500 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23510 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  o_error;.      i
23520 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
23530 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
23540 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
23550 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a   R-38219-53002 *
23560 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
23570 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23580 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
23590 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20   assert( v>0 ); 
235a0 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d   /* EV: R-40812-
235b0 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20  03570 */.    }. 
235c0 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
235d0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
235e0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
235f0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
23600 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
23610 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
23620 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
23630 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
23640 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
23650 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72  key=r[P3] data=r
23660 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  [P2].**.** Write
23670 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74   an entry into t
23680 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73  he table of curs
23690 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e  or P1.  A new en
236a0 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  try is.** create
236b0 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  d if it doesn't 
236c0 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72  already exist or
236d0 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e   the data for an
236e0 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74   existing.** ent
236f0 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  ry is overwritte
23700 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20  n.  The data is 
23710 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c  the value MEM_Bl
23720 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ob stored in reg
23730 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
23740 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
23750 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
23760 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
23770 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49  st.** be a MEM_I
23780 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nt..**.** If the
23790 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
237a0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
237b0 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
237c0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
237d0 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
237e0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
237f0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
23800 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
23810 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
23820 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
23830 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
23840 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
23850 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
23860 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
23870 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
23880 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
23890 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  fied)..**.** If 
238a0 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
238b0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
238c0 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69   P5 is set and i
238d0 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a  f the result of.
238e0 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b  ** the last seek
238f0 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e   operation (OP_N
23900 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61 20  otExists) was a 
23910 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74 68  success, then th
23920 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20  is.** operation 
23930 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74  will not attempt
23940 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70   to find the app
23950 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66  ropriate row bef
23960 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65  ore doing.** the
23970 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c   insert but will
23980 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69   instead overwri
23990 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  te the row that 
239a0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
239b0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
239c0 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61  ing to.  Presuma
239d0 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f  bly, the prior O
239e0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f  P_NotExists opco
239f0 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64  de.** has alread
23a00 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  y positioned the
23a10 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c   cursor correctl
23a20 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f  y.  This is an o
23a30 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  ptimization.** t
23a40 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f  hat boosts perfo
23a50 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69  rmance by avoidi
23a60 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65  ng redundant see
23a70 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ks..**.** If the
23a80 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
23a90 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68   flag is set, th
23aa0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
23ab0 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20  s part of an.** 
23ac0 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e  UPDATE operation
23ad0 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66  .  Otherwise (if
23ae0 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65   the flag is cle
23af0 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70  ar) then this op
23b00 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20  code.** is part 
23b10 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65  of an INSERT ope
23b20 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66  ration.  The dif
23b30 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20  ference is only 
23b40 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20  important to.** 
23b50 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e  the update hook.
23b60 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72  .**.** Parameter
23b70 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f   P4 may point to
23b80 20 61 20 54 61 62 6c 65 20 73 74 72 75 63 74 75   a Table structu
23b90 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55  re, or may be NU
23ba0 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a  LL. If it is .**
23bb0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
23bc0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
23bd0 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65  (sqlite3.xUpdate
23be0 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76  Callback) is inv
23bf0 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  oked .** followi
23c00 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20  ng a successful 
23c10 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57  insert..**.** (W
23c20 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20  ARNING/TODO: If 
23c30 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63  P1 is a pseudo-c
23c40 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20  ursor and P2 is 
23c50 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61  dynamically.** a
23c60 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f  llocated, then o
23c70 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69  wnership of P2 i
23c80 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f  s transferred to
23c90 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73   the pseudo-curs
23ca0 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74  or.** and regist
23cb0 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70  er P2 becomes ep
23cc0 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65  hemeral.  If the
23cd0 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67   cursor is chang
23ce0 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  ed, the.** value
23cf0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
23d00 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65  will then change
23d10 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69  .  Make sure thi
23d20 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61  s does not.** ca
23d30 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  use any problems
23d40 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  .).**.** This in
23d50 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
23d60 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20  orks on tables. 
23d70 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
23d80 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
23d90 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50  or indices is OP
23da0 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f  _IdxInsert..*/./
23db0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
23dc0 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20  Int P1 P2 P3 P4 
23dd0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
23de0 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d   intkey=P3 data=
23df0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P2].**.** This
23e00 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c   works exactly l
23e10 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78  ike OP_Insert ex
23e20 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b 65  cept that the ke
23e30 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65  y is the.** inte
23e40 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f  ger value P3, no
23e50 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
23e60 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65  he integer store
23e70 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
23e80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73  ..*/.case OP_Ins
23e90 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e  ert: .case OP_In
23ea0 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d  sertInt: {.  Mem
23eb0 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f   *pData;       /
23ec0 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
23ed0 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ng data for the 
23ee0 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
23ef0 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erted */.  Mem *
23f00 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20  pKey;        /* 
23f10 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
23f20 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65   key  for the re
23f30 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b  cord */.  i64 iK
23f40 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ey;         /* T
23f50 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
23f60 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65 20   or key for the 
23f70 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73  record to be ins
23f80 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43  erted */.  VdbeC
23f90 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20  ursor *pC;   /* 
23fa0 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20  Cursor to table 
23fb0 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72  into which inser
23fc0 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a  t is written */.
23fd0 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20    int nZero;    
23fe0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
23ff0 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20 61   zero-bytes to a
24000 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ppend */.  int s
24010 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
24020 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
24030 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
24040 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
24050 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
24060 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
24070 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
24080 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
24090 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20  hook */.  Table 
240a0 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  *pTab;      /* T
240b0 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d  able structure -
240c0 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20   used by update 
240d0 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68  and pre-update h
240e0 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  ooks */.  int op
240f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
24100 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
24110 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
24120 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
24130 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 6f 70 20 3d  NSERT */..  op =
24140 20 30 3b 0a 20 20 70 44 61 74 61 20 3d 20 26 61   0;.  pData = &a
24150 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
24160 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24170 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24180 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
24190 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
241a0 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
241b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
241c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
241d0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
241e0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
241f0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
24200 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
24210 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
24220 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
24230 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
24240 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
24250 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d  P4_TABLE || pOp-
24260 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41 54  >p4type>=P4_STAT
24270 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52  IC );.  REGISTER
24280 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
24290 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70  pData);..  if( p
242a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
242b0 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65  nsert ){.    pKe
242c0 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  y = &aMem[pOp->p
242d0 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
242e0 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pKey->flags & ME
242f0 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73  M_Int );.    ass
24300 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
24310 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47  pKey) );.    REG
24320 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
24330 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20  >p3, pKey);.    
24340 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69  iKey = pKey->u.i
24350 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
24360 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
24370 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74  de==OP_InsertInt
24380 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70   );.    iKey = p
24390 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
243a0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
243b0 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
243c0 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
243d0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
243e0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
243f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
24400 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20  b>=0 );.    zDb 
24410 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
24420 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70 54  b].zName;.    pT
24430 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
24440 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 48  b;.    assert( H
24450 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 3b  asRowid(pTab) );
24460 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
24470 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
24480 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
24490 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
244a0 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c 73 65  INSERT);.  }else
244b0 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20  {.    pTab = 0; 
244c0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
244d0 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69 6c 65  Silence a comile
244e0 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
244f0 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e    zDb = 0;  /* N
24500 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
24510 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
24520 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
24530 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24540 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
24550 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
24560 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68  the pre-update h
24570 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  ook, if any */. 
24580 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64   if( db->xPreUpd
24590 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20 20  ateCallback .   
245a0 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  && pOp->p4type==
245b0 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20 21  P4_TABLE.   && !
245c0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
245d0 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20 29 7b  G_ISUPDATE).  ){
245e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
245f0 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
24600 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45   pC, SQLITE_INSE
24610 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 69  RT, zDb, pTab, i
24620 4b 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  Key, pOp->p2);. 
24630 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28   }.#endif..  if(
24640 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
24650 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
24660 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
24670 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
24680 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
24690 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
246a0 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20  tRowid = iKey;. 
246b0 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
246c0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
246d0 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30      pData->z = 0
246e0 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d  ;.    pData->n =
246f0 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
24700 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e   assert( pData->
24710 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f  flags & (MEM_Blo
24720 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20  b|MEM_Str) );.  
24730 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  }.  seekResult =
24740 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
24750 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
24760 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
24770 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
24780 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
24790 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e  EM_Zero ){.    n
247a0 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
247b0 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
247c0 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20      nZero = 0;. 
247d0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
247e0 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
247f0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
24800 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20  iKey,.          
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61 2d  pData->z, pData-
24830 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20 20  >n, nZero,.     
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24850 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
24860 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21 3d  OPFLAG_APPEND)!=
24870 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  0, seekResult.  
24880 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
24890 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
248a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
248b0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
248c0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
248d0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
248e0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
248f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
24900 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
24910 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
24920 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20 29  Callback && op )
24930 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  {.    db->xUpdat
24940 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
24950 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
24960 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20  b, pTab->zName, 
24970 69 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65  iKey);.  }.  bre
24980 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24990 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  : Delete P1 P2 P
249a0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65  3 P4 P5.**.** De
249b0 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
249c0 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
249d0 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
249e0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
249f0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
24a00 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62  G_SAVEPOSITION b
24a10 69 74 20 6f 66 20 74 68 65 20 50 35 20 70 61 72  it of the P5 par
24a20 61 6d 65 74 65 72 20 69 73 20 73 65 74 2c 20 74  ameter is set, t
24a30 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  hen.** the curso
24a40 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
24a50 6f 69 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68  ointing at  eith
24a60 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
24a70 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
24a80 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
24a90 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
24aa0 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
24ab0 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
24ac0 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
24ad0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
24ae0 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
24af0 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69  . As a result, i
24b00 6e 20 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69  n this case.** i
24b10 74 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74  t is ok to delet
24b20 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  e a record from 
24b30 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f  within a Next lo
24b40 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41  op. If .** OPFLA
24b50 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62  G_SAVEPOSITION b
24b60 69 74 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61  it of P5 is clea
24b70 72 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  r, then the curs
24b80 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65  or will be.** le
24b90 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e  ft in an undefin
24ba0 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ed state..**.** 
24bb0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55  If the OPFLAG_AU
24bc0 58 44 45 4c 45 54 45 20 62 69 74 20 69 73 20 73  XDELETE bit is s
24bd0 65 74 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69  et on P5, that i
24be0 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
24bf0 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65  is.** delete one
24c00 20 6f 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f   of several asso
24c10 63 69 61 74 65 64 20 77 69 74 68 20 64 65 6c 65  ciated with dele
24c20 74 69 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77  ting a table row
24c30 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20   and all its.** 
24c40 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78  associated index
24c50 20 65 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74   entries.  Exact
24c60 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20  ly one of those 
24c70 64 65 6c 65 74 65 73 20 69 73 20 74 68 65 20 22  deletes is the "
24c80 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65  primary".** dele
24c90 74 65 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20  te.  The others 
24ca0 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41  are all on OPFLA
24cb0 47 5f 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73  G_FORDELETE curs
24cc0 6f 72 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a  ors or else are.
24cd0 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74  ** marked with t
24ce0 68 65 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61  he AUXDELETE fla
24cf0 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  g..**.** If the 
24d00 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
24d10 6c 61 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50  lag of P2 (NB: P
24d20 32 20 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74  2 not P5) is set
24d30 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a  , then the row.*
24d40 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  * change count i
24d50 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  s incremented (o
24d60 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
24d70 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
24d80 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
24d90 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
24da0 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
24db0 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
24dc0 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
24dd0 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
24de0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
24df0 54 61 62 6c 65 20 73 74 72 75 74 75 72 65 2e 20  Table struture. 
24e00 49 6e 20 74 68 69 73 20 63 61 73 65 20 65 69 74  In this case eit
24e10 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70 64 61  her .** the upda
24e20 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65  te or pre-update
24e30 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20   hook, or both, 
24e40 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20  may be invoked. 
24e50 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
24e60 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  st.** have been 
24e70 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69 6e 67  positioned using
24e80 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
24e90 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
24ea0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a  his opcode in .*
24eb0 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53 70 65  * this case. Spe
24ec0 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e  cifically, if on
24ed0 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
24ee0 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
24ef0 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f  hook is .** invo
24f00 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e 6f 74  ked if P4 is not
24f10 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64 61 74   NULL. The updat
24f20 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65  e-hook is invoke
24f30 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  d if one is conf
24f40 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69  igured, .** P4 i
24f50 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20  s not NULL, and 
24f60 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
24f70 47 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  GE flag is set i
24f80 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  n P2..**.** If t
24f90 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
24fa0 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  TE flag is set i
24fb0 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20 63 6f  n P2, then P3 co
24fc0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
24fd0 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d  ss.** of the mem
24fe0 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
24ff0 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65  ntains the value
25000 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 20   that the rowid 
25010 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a  of the row will.
25020 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62 79 20  ** be set to by 
25030 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63  the update..*/.c
25040 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
25050 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25060 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  C;.  const char 
25070 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70  *zDb;.  Table *p
25080 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61  Tab;.  int opfla
25090 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d  gs;..  opflags =
250a0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
250b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
250c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
250d0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
250e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
250f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25100 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25110 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
25120 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
25130 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
25140 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
25150 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25160 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
25170 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25180 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
25190 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
251a0 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f 70   && HasRowid(pOp
251b0 2d 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70 4f  ->p4.pTab) && pO
251c0 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p5==0 ){.    
251d0 2f 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72 6f  /* If p5 is zero
251e0 2c 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72 61  , the seek opera
251f0 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69  tion that positi
25200 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
25210 70 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20  prior to.    ** 
25220 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20 68  OP_Delete will h
25230 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65  ave also set the
25240 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
25250 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72  t field to the r
25260 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74  owid of.    ** t
25270 68 65 20 72 6f 77 20 74 68 61 74 20 69 73 20 62  he row that is b
25280 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a  eing deleted */.
25290 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 30      i64 iKey = 0
252a0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
252b0 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63  eeKeySize(pC->uc
252c0 2e 70 43 75 72 73 6f 72 2c 20 26 69 4b 65 79 29  .pCursor, &iKey)
252d0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
252e0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d  ->movetoTarget==
252f0 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  iKey );.  }.#end
25300 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  if..  /* If the 
25310 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70  update-hook or p
25320 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77  re-update-hook w
25330 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
25340 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20  set zDb to.  ** 
25350 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
25360 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f  db to pass as to
25370 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f   it. Also set lo
25380 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f  cal pTab to a co
25390 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54  py.  ** of p4.pT
253a0 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  ab. Finally, if 
253b0 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69  p5 is true, indi
253c0 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73  cating that this
253d0 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a   cursor was.  **
253e0 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68   last moved with
253f0 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50   OP_Next or OP_P
25400 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72  rev, not Seek or
25410 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a   NotFound, set .
25420 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e    ** VdbeCursor.
25430 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20  movetoTarget to 
25440 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69  the current rowi
25450 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  d.  */.  if( pOp
25460 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
25470 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
25480 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
25490 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
254a0 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
254b0 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21  t( pOp->p4.pTab!
254c0 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20  =0 );.    zDb = 
254d0 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
254e0 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  .zName;.    pTab
254f0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
25500 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
25510 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  5 & OPFLAG_SAVEP
25520 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70  OSITION)!=0 && p
25530 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
25540 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
25550 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70  KeySize(pC->uc.p
25560 43 75 72 73 6f 72 2c 20 26 70 43 2d 3e 6d 6f 76  Cursor, &pC->mov
25570 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20  etoTarget);.    
25580 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  }.  }else{.    z
25590 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74  Db = 0;   /* Not
255a0 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
255b0 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
255c0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61  ning. */.    pTa
255d0 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  b = 0;  /* Not n
255e0 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
255f0 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
25600 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64  ng. */.  }..#ifd
25610 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25620 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
25630 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
25640 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
25650 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
25660 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70    if( db->xPreUp
25670 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
25680 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 26 26 20  pOp->p4.pTab && 
25690 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
256a0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  {.    assert( !(
256b0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
256c0 5f 49 53 55 50 44 41 54 45 29 20 7c 7c 20 28 61  _ISUPDATE) || (a
256d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61  Mem[pOp->p3].fla
256e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b  gs & MEM_Int) );
256f0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25700 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
25710 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70   pC,.        (op
25720 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
25730 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
25740 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
25750 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20  E_DELETE, .     
25760 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43     zDb, pTab, pC
25770 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a  ->movetoTarget,.
25780 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a          pOp->p3.
25790 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28      );.  }.  if(
257a0 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41   opflags & OPFLA
257b0 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b  G_ISNOOP ) break
257c0 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20  ;.#endif. .  /* 
257d0 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20  Only flags that 
257e0 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53  can be set are S
257f0 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20  AVEPOISTION and 
25800 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20  AUXDELETE */ .  
25810 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
25820 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45   & ~(OPFLAG_SAVE
25830 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f  POSITION|OPFLAG_
25840 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29  AUXDELETE))==0 )
25850 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
25860 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d  AG_SAVEPOSITION=
25870 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54  =BTREE_SAVEPOSIT
25880 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ION );.  assert(
25890 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
258a0 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45  E==BTREE_AUXDELE
258b0 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  TE );..#ifdef SQ
258c0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
258d0 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b   p->pFrame==0 ){
258e0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45  .    if( pC->isE
258f0 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20  phemeral==0.    
25900 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20      && (pOp->p5 
25910 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  & OPFLAG_AUXDELE
25920 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  TE)==0.        &
25930 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20  & (pC->wrFlag & 
25940 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
25950 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
25960 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
25970 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
25980 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
25990 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
259a0 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
259b0 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  --;.    }.  }.#e
259c0 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ndif..  rc = sql
259d0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
259e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
259f0 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e  pOp->p5);.  pC->
25a00 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
25a10 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
25a20 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
25a30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
25a40 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
25a50 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
25a60 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
25a70 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
25a80 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
25a90 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
25aa0 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64      if( db->xUpd
25ab0 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48  ateCallback && H
25ac0 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b  asRowid(pTab) ){
25ad0 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61  .      db->xUpda
25ae0 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
25af0 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
25b00 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70  E_DELETE, zDb, p
25b10 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
25b20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f        pC->moveto
25b30 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61  Target);.      a
25b40 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
25b50 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  0 );.    }.  }..
25b60 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
25b70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
25b80 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
25b90 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
25ba0 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
25bb0 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
25bc0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
25bd0 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
25be0 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
25bf0 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
25c00 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
25c10 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
25c20 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
25c30 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
25c40 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
25c50 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
25c60 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
25c70 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
25c80 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
25c90 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
25ca0 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
25cb0 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
25cc0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
25cd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
25ce0 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
25cf0 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
25d00 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29  sis:  if key(P1)
25d10 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  !=trim(r[P3],P4)
25d20 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
25d30 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
25d40 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
25d50 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
25d60 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
25d70 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  ** record blob i
25d80 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
25d90 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
25da0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
25db0 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
25dc0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
25dd0 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
25de0 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
25df0 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
25e00 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
25e10 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
25e20 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
25e30 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
25e40 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
25e50 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
25e60 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
25e70 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
25e80 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
25e90 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
25ea0 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
25eb0 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
25ec0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
25ed0 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
25ee0 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
25ef0 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
25f00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
25f10 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
25f20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
25f30 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
25f40 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
25f50 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
25f60 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
25f70 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
25f80 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25f90 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
25fa0 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
25fb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
25fc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
25fd0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
25fe0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25ff0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
26000 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
26010 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
26020 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
26030 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  i;.  res = 0;.  
26040 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26050 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
26060 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c  , pIn3, nKeyCol,
26070 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72   &res);.  VdbeBr
26080 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
26090 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
260a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
260b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
260c0 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
260d0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
260e0 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
260f0 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50  rterData P1 P2 P
26100 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
26110 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
26120 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
26130 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
26140 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61  urrent sorter da
26150 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75  ta for sorter cu
26160 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e  rsor P1..** Then
26170 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d   clear the colum
26180 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f  n header cache o
26190 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a  n cursor P3..**.
261a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
261b0 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74  s normally use t
261c0 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20  o move a record 
261d0 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65  out of the sorte
261e0 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20  r and into.** a 
261f0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73  register that is
26200 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20   the source for 
26210 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
26220 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73  ursor created us
26230 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64  ing.** OpenPseud
26240 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d  o.  That pseudo-
26250 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20  table cursor is 
26260 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20  the one that is 
26270 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a  identified by.**
26280 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20   parameter P3.  
26290 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20  Clearing the P3 
262a0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20  column cache as 
262b0 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63  part of this opc
262c0 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20  ode saves.** us 
262d0 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69  from having to i
262e0 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20  ssue a separate 
262f0 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74  NullRow instruct
26300 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61  ion to clear tha
26310 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65  t cache..*/.case
26320 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20   OP_SorterData: 
26330 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
26340 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  pC;..  pOut = &a
26350 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
26360 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26370 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26380 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
26390 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
263a0 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79  VdbeSorterRowkey
263b0 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73  (pC, pOut);.  as
263c0 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
263d0 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c  _OK || (pOut->fl
263e0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20  ags & MEM_Blob) 
263f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26400 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
26410 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
26420 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26430 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26440 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  ror;.  p->apCsr[
26450 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53  pOp->p3]->cacheS
26460 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26470 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
26480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
26490 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
264a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
264b0 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
264c0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
264d0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
264e0 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63  e row data for c
264f0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
26500 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
26510 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
26520 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20  ata.  .** It is 
26530 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f  just copied onto
26540 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
26550 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
26560 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
26570 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
26580 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
26590 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
265a0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
265b0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
265c0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
265d0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
265e0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
265f0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
26600 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a  RowKey P1 P2 * *
26610 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
26620 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20  r[P2]=key.**.** 
26630 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26640 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
26650 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
26660 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
26670 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
26680 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
26690 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
266a0 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
266b0 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
266c0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
266d0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
266e0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
266f0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
26700 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
26710 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
26720 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
26730 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
26740 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
26750 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
26760 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
26770 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
26780 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
26790 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
267a0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
267b0 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
267c0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
267d0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65  m[pOp->p2];.  me
267e0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
267f0 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e  , pOut);..  /* N
26800 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20  ote that RowKey 
26810 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20  and RowData are 
26820 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74  really exactly t
26830 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74  he same instruct
26840 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ion */.  assert(
26850 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26860 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26870 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26880 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26890 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
268a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
268b0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
268c0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
268d0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
268e0 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
268f0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c  ( pC->isTable ||
26900 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
26910 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
26920 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
26930 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  e==0 || pOp->opc
26940 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20  ode==OP_RowData 
26950 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26960 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
26970 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
26980 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
26990 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
269a0 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68  Cursor;..  /* Th
269b0 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64 20  e OP_RowKey and 
269c0 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
269d0 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
269e0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
269f0 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 2f  .  ** OP_Rewind/
26a00 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
26a10 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
26a20 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ructions that mi
26a30 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a 20  ght invalidate. 
26a40 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e 20   ** the cursor. 
26a50 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20 6e   If this where n
26a60 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20  ot the case, on 
26a70 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
26a80 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20   assert()s.  ** 
26a90 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f  would fail.  Sho
26aa0 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63 68  uld this ever ch
26ab0 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f 66  ange (because of
26ac0 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
26ad0 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61  code.  ** genera
26ae0 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66 69  tor) then the fi
26af0 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e  x would be to in
26b00 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20  sert a call to. 
26b10 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43   ** sqlite3VdbeC
26b20 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20  ursorMoveto().. 
26b30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43   */.  assert( pC
26b40 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26b50 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
26b60 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
26b70 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
26b80 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e  ) );.#if 0  /* N
26b90 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65 20  ot required due 
26ba0 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
26bb0 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61 74  to assert() stat
26bc0 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d  ements */.  rc =
26bd0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
26be0 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
26bf0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
26c00 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
26c10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
26c20 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  dif..  if( pC->i
26c30 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
26c40 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73   assert( !pC->is
26c50 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41  Table );.    VVA
26c60 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69  _ONLY(rc =) sqli
26c70 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
26c80 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20  pCrsr, &n64);.  
26c90 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
26ca0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
26cb0 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66   True because of
26cc0 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
26cd0 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20  call above */.  
26ce0 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c    if( n64>db->aL
26cf0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
26d00 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
26d10 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
26d20 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28  .    }.    n = (
26d30 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65  u32)n64;.  }else
26d40 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72  {.    VVA_ONLY(r
26d50 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65  c =) sqlite3Btre
26d60 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c  eDataSize(pCrsr,
26d70 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74   &n);.    assert
26d80 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
26d90 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a  );    /* DataSiz
26da0 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  e() cannot fail 
26db0 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33  */.    if( n>(u3
26dc0 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
26dd0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
26de0 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
26df0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
26e00 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e   }.  testcase( n
26e10 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  ==0 );.  if( sql
26e20 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
26e30 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20  AndResize(pOut, 
26e40 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20 20  MAX(n,32)) ){.  
26e50 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
26e60 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e   }.  pOut->n = n
26e70 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
26e80 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f  ag(pOut, MEM_Blo
26e90 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  b);.  if( pC->is
26ea0 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
26eb0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
26ec0 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20 6e  eKey(pCrsr, 0, n
26ed0 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65  , pOut->z);.  }e
26ee0 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  lse{.    rc = sq
26ef0 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28 70  lite3BtreeData(p
26f00 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
26f10 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ->z);.  }.  if( 
26f20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
26f30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26f40 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
26f50 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
26f60 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
26f70 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
26f80 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
26f90 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
26fa0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
26fb0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
26fc0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
26fd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
26fe0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
26ff0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
27000 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
27010 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
27020 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
27030 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
27040 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
27050 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
27060 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
27070 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
27080 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
27090 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
270a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
270b0 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
270c0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
270d0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
270e0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
270f0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
27100 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
27110 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
27120 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
27130 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
27140 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
27150 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
27160 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
27170 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
27180 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
27190 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
271a0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
271b0 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  dule;..  pOut = 
271c0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
271d0 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
271e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
271f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
27200 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
27210 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27220 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27230 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27240 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
27250 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d  PE_PSEUDO || pC-
27260 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
27270 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
27280 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
27290 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
272a0 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
272b0 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
272c0 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
272d0 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
272e0 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
272f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27300 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
27310 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
27320 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20  URTYPE_VTAB ){. 
27330 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
27340 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20  c.pVCur!=0 );.  
27350 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63    pVtab = pC->uc
27360 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
27370 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
27380 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
27390 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
273a0 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
273b0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
273c0 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75  owid(pC->uc.pVCu
273d0 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
273e0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
273f0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
27400 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
27410 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27420 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ror;.#endif /* S
27430 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27440 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
27450 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
27460 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27470 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
27480 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
27490 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
274a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
274b0 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
274c0 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  e(pC);.    if( r
274d0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
274e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
274f0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
27500 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
27510 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
27520 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
27530 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
27540 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
27550 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
27560 2c 20 26 76 29 3b 0a 20 20 20 20 61 73 73 65 72  , &v);.    asser
27570 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
27580 20 29 3b 20 20 2f 2a 20 41 6c 77 61 79 73 20 73   );  /* Always s
27590 6f 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  o because of Cur
275a0 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 62 6f  sorRestore() abo
275b0 76 65 20 2a 2f 0a 20 20 7d 0a 20 20 70 4f 75 74  ve */.  }.  pOut
275c0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
275d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
275e0 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
275f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
27600 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
27610 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
27620 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
27630 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
27640 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
27650 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
27660 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
27670 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
27680 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
27690 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
276a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
276b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
276c0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
276d0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
276e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
276f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27700 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
27710 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
27720 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
27730 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
27740 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
27750 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
27760 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
27770 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
27780 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   );.    sqlite3B
27790 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
277a0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
277b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
277c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74  ./* Opcode: Last
277d0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
277e0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
277f0 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
27800 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20   Column or Prev 
27810 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
27820 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
27830 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
27840 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
27850 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
27860 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
27870 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
27880 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
27890 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
278a0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
278b0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
278c0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
278d0 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
278e0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
278f0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
27900 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
27910 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
27920 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
27930 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
27940 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
27950 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
27960 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
27970 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
27980 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
27990 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
279a0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
279b0 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
279c0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  t..*/.case OP_La
279d0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
279e0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
279f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
27a00 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
27a10 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
27a20 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
27a30 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
27a40 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
27a50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
27a60 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
27a70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27a80 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
27a90 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
27aa0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
27ab0 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30  ursor;.  res = 0
27ac0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
27ad0 72 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  r!=0 );.  rc = s
27ae0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
27af0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
27b00 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
27b10 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66  8)res;.  pC->def
27b20 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
27b30 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
27b40 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
27b50 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
27b60 6c 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 23 69  lt = pOp->p3;.#i
27b70 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
27b80 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
27b90 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66   OP_Last;.#endif
27ba0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
27bb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27bc0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
27bd0 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65  p2>0 ){.    Vdbe
27be0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
27bf0 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72  =0,2);.    if( r
27c00 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
27c10 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
27c20 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
27c30 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
27c40 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
27c50 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
27c60 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
27c70 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
27c80 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
27c90 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
27ca0 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
27cb0 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
27cc0 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
27cd0 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
27ce0 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
27cf0 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
27d00 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
27d10 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
27d20 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
27d30 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
27d40 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
27d50 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
27d60 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
27d70 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
27d80 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
27d90 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
27da0 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
27db0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
27dc0 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
27dd0 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
27de0 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
27df0 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
27e00 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
27e10 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
27e20 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
27e30 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
27e40 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
27e50 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Sort:    /* jump
27e60 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74   */.case OP_Sort
27e70 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
27e80 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
27e90 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
27ea0 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
27eb0 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
27ec0 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
27ed0 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
27ee0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
27ef0 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20  S_SORT]++;.  /* 
27f00 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
27f10 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
27f20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
27f30 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
27f40 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
27f50 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
27f60 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
27f70 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
27f80 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
27f90 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
27fa0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
27fb0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
27fc0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
27fd0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
27fe0 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d  s empty, jump im
27ff0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
28000 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
28010 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74   or index is not
28020 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72   empty, fall thr
28030 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ough to the foll
28040 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75  owing .** instru
28050 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
28060 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
28070 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
28080 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
28090 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
280a0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
280b0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
280c0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
280d0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
280e0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
280f0 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
28100 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73  not Prev..*/.cas
28110 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20  e OP_Rewind: {  
28120 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
28130 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28140 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
28150 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
28160 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
28170 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
28180 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
28190 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
281a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
281b0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
281c0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
281d0 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
281e0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  e==OP_SorterSort
281f0 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a  ) );.  res = 1;.
28200 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
28210 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
28220 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65   = OP_Rewind;.#e
28230 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72  ndif.  if( isSor
28240 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72  ter(pC) ){.    r
28250 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
28260 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20  orterRewind(pC, 
28270 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  &res);.  }else{.
28280 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
28290 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
282a0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70  E_BTREE );.    p
282b0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
282c0 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72  ursor;.    asser
282d0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
282e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
282f0 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
28300 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  es);.    pC->def
28310 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
28320 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
28330 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
28340 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
28350 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28360 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43  e_to_error;.  pC
28370 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29  ->nullRow = (u8)
28380 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70  res;.  assert( p
28390 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
283a0 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
283b0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
283c0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
283d0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
283e0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
283f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
28400 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ext P1 P2 P3 P4 
28410 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
28420 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
28430 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
28440 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
28450 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
28460 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
28470 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
28480 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
28490 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
284a0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
284b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
284c0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
284d0 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
284e0 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
284f0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
28500 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
28510 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f  **.** The Next o
28520 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
28530 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
28540 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
28550 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64   or.** OP_Rewind
28560 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
28570 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
28580 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f  sor.  Next is no
28590 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
285a0 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53  follow SeekLT, S
285b0 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73  eekLE, or OP_Las
285c0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  t..**.** The P1 
285d0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
285e0 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
285f0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
28600 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
28610 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
28620 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
28630 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
28640 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
28650 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
28660 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
28670 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
28680 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
28690 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
286a0 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
286b0 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
286c0 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
286d0 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
286e0 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
286f0 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
28700 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
28710 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
28720 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
28730 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
28740 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
28750 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
28760 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
28770 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
28780 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
28790 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
287a0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
287b0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
287c0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
287d0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
287e0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
287f0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
28800 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
28810 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
28820 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65  e also: Prev, Ne
28830 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f  xtIfOpen.*/./* O
28840 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65  pcode: NextIfOpe
28850 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
28860 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28870 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
28880 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74  ke Next except t
28890 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31  hat if cursor P1
288a0 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20   is not.** open 
288b0 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d  it behaves a no-
288c0 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  op..*/./* Opcode
288d0 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20  : Prev P1 P2 P3 
288e0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b  P4 P5.**.** Back
288f0 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f   up cursor P1 so
28900 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
28910 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
28920 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
28930 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
28940 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
28950 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73  e is no previous
28960 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
28970 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
28980 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
28990 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
289a0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
289b0 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61  cursor backup wa
289c0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
289d0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
289e0 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a  y to P2..**.**.*
289f0 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
28a00 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
28a10 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
28a20 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a  kLT, SeekLE, or.
28a30 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64  ** OP_Last opcod
28a40 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
28a50 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
28a60 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Prev is not allo
28a70 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
28a80 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
28a90 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a   or OP_Rewind..*
28aa0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
28ab0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
28ac0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
28ad0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
28ae0 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f    If P1 is.** no
28af0 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20  t open then the 
28b00 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
28b10 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fined..**.** The
28b20 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
28b30 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
28b40 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
28b50 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
28b60 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
28b70 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
28b80 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
28b90 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
28ba0 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
28bb0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
28bc0 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
28bd0 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
28be0 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
28bf0 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
28c00 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
28c10 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
28c20 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
28c30 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
28c40 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
28c50 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
28c60 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
28c70 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
28c80 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
28c90 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
28ca0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
28cb0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
28cc0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
28cd0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f   incremented..*/
28ce0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
28cf0 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
28d00 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
28d10 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
28d20 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63  st like Prev exc
28d30 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
28d40 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
28d50 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
28d60 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
28d70 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
28d80 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
28d90 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
28da0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43    int res;..  pC
28db0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
28dc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
28dd0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
28de0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
28df0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
28e00 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20  terNext(db, pC, 
28e10 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  &res);.  goto ne
28e20 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
28e30 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20  _PrevIfOpen:    
28e40 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
28e50 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20  OP_NextIfOpen:  
28e60 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
28e70 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  f( p->apCsr[pOp-
28e80 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b  >p1]==0 ) break;
28e90 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
28ea0 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  gh */.case OP_Pr
28eb0 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
28ec0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
28ed0 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f  Next:          /
28ee0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
28ef0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
28f00 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
28f10 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
28f20 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53  ( pOp->p5<ArrayS
28f30 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29  ize(p->aCounter)
28f40 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
28f50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28f60 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  res = pOp->p3;. 
28f70 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28f80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28f90 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
28fa0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
28fb0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
28fc0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
28fd0 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c  assert( res==0 |
28fe0 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d  | (res==1 && pC-
28ff0 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a  >isTable==0) );.
29000 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d    testcase( res=
29010 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
29020 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
29030 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Next || pOp->p4.
29040 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
29050 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
29060 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29070 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
29080 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
29090 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
290a0 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65  evious );.  asse
290b0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
290c0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c  =OP_NextIfOpen |
290d0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
290e0 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
290f0 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
29100 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
29110 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20  P_PrevIfOpen || 
29120 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
29130 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
29140 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54  evious);..  /* T
29150 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
29160 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
29170 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  r SeekGT, SeekGE
29180 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20  , and Rewind..  
29190 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
291a0 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
291b0 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65  after SeekLT, Se
291c0 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20  ekLE, and Last. 
291d0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
291e0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
291f0 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  t || pOp->opcode
29200 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a  !=OP_NextIfOpen.
29210 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
29220 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ekOp==OP_SeekGT 
29230 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
29240 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20  P_SeekGE.       
29250 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
29260 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e  P_Rewind || pC->
29270 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64  seekOp==OP_Found
29280 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
29290 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
292a0 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  v || pOp->opcode
292b0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a  !=OP_PrevIfOpen.
292c0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
292d0 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ekOp==OP_SeekLT 
292e0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
292f0 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20  P_SeekLE.       
29300 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
29310 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20  P_Last );..  rc 
29320 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  = pOp->p4.xAdvan
29330 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ce(pC->uc.pCurso
29340 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74  r, &res);.next_t
29350 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65  ail:.  pC->cache
29360 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
29370 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e  TALE;.  VdbeBran
29380 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32  chTaken(res==0,2
29390 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
293a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
293b0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
293c0 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e  ==0 ){.    pC->n
293d0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
293e0 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d  p->aCounter[pOp-
293f0 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53  >p5]++;.#ifdef S
29400 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73  QLITE_TEST.    s
29410 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
29420 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
29430 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
29440 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
29450 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c  interrupt;.  }el
29460 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c  se{.    pC->null
29470 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67  Row = 1;.  }.  g
29480 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
29490 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
294a0 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
294b0 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
294c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
294d0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
294e0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
294f0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
29500 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
29510 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
29520 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
29530 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
29540 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
29550 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
29560 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
29570 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
29580 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
29590 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
295a0 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
295b0 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
295c0 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
295d0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
295e0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
295f0 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
29600 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
29610 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
29620 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
29630 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
29640 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
29650 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
29660 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
29670 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
29680 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
29690 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
296a0 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
296b0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
296c0 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74  ESULT bit set, t
296d0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
296e0 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74  ust have.** just
296f0 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20   done a seek to 
29700 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74  the spot where t
29710 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  he new entry is 
29720 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a  to be inserted..
29730 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f  ** This flag avo
29740 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74  ids doing an ext
29750 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54  ra seek..**.** T
29760 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
29770 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
29780 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
29790 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
297a0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
297b0 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
297c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
297d0 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
297e0 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
297f0 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
29800 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
29810 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
29820 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63  .  int nKey;.  c
29830 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
29840 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
29850 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
29860 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
29870 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
29880 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29890 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
298a0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
298b0 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
298c0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
298d0 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
298e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
298f0 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
29900 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
29910 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
29920 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
29930 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
29940 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  +;.  assert( pC-
29950 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
29960 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d  PE_BTREE || pOp-
29970 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
29980 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73  erInsert );.  as
29990 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
299a0 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
299b0 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
299c0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
299d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
299e0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
299f0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
29a00 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72  rInsert ){.    r
29a10 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
29a20 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
29a30 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  In2);.  }else{. 
29a40 20 20 20 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e     nKey = pIn2->
29a50 6e 3b 0a 20 20 20 20 7a 4b 65 79 20 3d 20 70 49  n;.    zKey = pI
29a60 6e 32 2d 3e 7a 3b 0a 20 20 20 20 72 63 20 3d 20  n2->z;.    rc = 
29a70 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
29a80 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
29a90 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22  r, zKey, nKey, "
29aa0 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33  ", 0, 0, pOp->p3
29ab0 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70  , .        ((pOp
29ac0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
29ad0 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
29ae0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
29af0 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20  0).        );.  
29b00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
29b10 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
29b20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  );.    pC->cache
29b30 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
29b40 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
29b50 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  rc) goto abort_d
29b60 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
29b70 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29b80 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31  de: IdxDelete P1
29b90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
29ba0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
29bb0 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  @P3].**.** The c
29bc0 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67  ontent of P3 reg
29bd0 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
29be0 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66  at register P2 f
29bf0 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b  orm.** an unpack
29c00 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68  ed index key. Th
29c10 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65  is opcode remove
29c20 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f  s that entry fro
29c30 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20  m the .** index 
29c40 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
29c50 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
29c60 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  IdxDelete: {.  V
29c70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
29c80 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
29c90 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
29ca0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
29cb0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
29cc0 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p3>0 );.  asser
29cd0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
29ce0 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c  pOp->p2+pOp->p3<
29cf0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
29d00 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
29d10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
29d20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
29d30 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
29d40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
29d50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
29d60 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
29d70 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
29d80 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
29d90 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
29da0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
29db0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
29dc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
29dd0 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70  ->p5==0 );.  r.p
29de0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
29df0 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
29e00 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
29e10 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  3;.  r.default_r
29e20 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20  c = 0;.  r.aMem 
29e30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
29e40 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29e50 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
29e60 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
29e70 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
29e80 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
29e90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
29ea0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
29eb0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
29ec0 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
29ed0 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45  r, BTREE_AUXDELE
29ee0 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  TE);.    if( rc 
29ef0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29f00 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
29f10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
29f20 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
29f30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
29f40 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
29f50 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
29f60 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50  * Opcode: Seek P
29f70 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53  1 * P3 P4 *.** S
29f80 79 6e 6f 70 73 69 73 3a 20 20 4d 6f 76 65 20 50  ynopsis:  Move P
29f90 33 20 74 6f 20 50 31 2e 72 6f 77 69 64 0a 2a 2a  3 to P1.rowid.**
29fa0 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
29fb0 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61  n index cursor a
29fc0 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73 6f  nd P3 is a curso
29fd0 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  r on the corresp
29fe0 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e  onding.** table.
29ff0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f    This opcode do
2a000 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65  es a deferred se
2a010 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61 62  ek of the P3 tab
2a020 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20  le cursor.** to 
2a030 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72  the row that cor
2a040 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
2a050 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50  current row of P
2a060 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  1..**.** This is
2a070 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
2a080 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
2a090 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
2a0a0 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
2a0b0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
2a0c0 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
2a0d0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
2a0e0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
2a0f0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
2a100 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ppens..**.** P4 
2a110 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79 20  may be an array 
2a120 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79 70  of integers (typ
2a130 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63  e P4_INTARRAY) c
2a140 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65  ontaining.** one
2a150 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
2a160 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33  column in the P3
2a170 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61   table.  If arra
2a180 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20  y entry a(i).** 
2a190 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2a1a0 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e  n reading column
2a1b0 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72   a(i)-1 from cur
2a1c0 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71  sor P3 is .** eq
2a1d0 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66  uivalent to perf
2a1e0 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72  orming the defer
2a1f0 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65  red seek and the
2a200 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e  n reading column
2a210 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20   i .** from P1. 
2a220 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   This informatio
2a230 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  n is stored in P
2a240 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65  3 and used to re
2a250 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20  direct.** reads 
2a260 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20  against P3 over 
2a270 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73  to P1, thus poss
2a280 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68  ibly avoiding th
2a290 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65  e need to.** see
2a2a0 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f  k and read curso
2a2b0 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  r P3..*/./* Opco
2a2c0 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
2a2d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2a2e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
2a2f0 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  d.**.** Write in
2a300 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61  to register P2 a
2a310 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
2a320 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  is the last entr
2a330 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y in the record 
2a340 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  at.** the end of
2a350 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70   the index key p
2a360 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72  ointed to by cur
2a370 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e  sor P1.  This in
2a380 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  teger should be.
2a390 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
2a3a0 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
2a3b0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e  to which this in
2a3c0 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73  dex entry points
2a3d0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2a3e0 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63  : Rowid, MakeRec
2a3f0 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ord..*/.case OP_
2a400 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64  Seek:.case OP_Id
2a410 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
2a420 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2a430 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2a440 70 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pC;             
2a450 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64     /* The P1 ind
2a460 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56  ex cursor */.  V
2a470 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43  dbeCursor *pTabC
2a480 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ur;           /*
2a490 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63 75   The P2 table cu
2a4a0 72 73 6f 72 20 28 4f 50 5f 53 65 65 6b 20 6f 6e  rsor (OP_Seek on
2a4b0 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77  ly) */.  i64 row
2a4c0 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
2a4d0 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64          /* Rowid
2a4e0 20 74 68 61 74 20 50 31 20 63 75 72 72 65 6e 74   that P1 current
2a4f0 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20   points to */.. 
2a500 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2a510 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2a520 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2a530 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2a540 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2a550 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2a560 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2a570 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2a580 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2a590 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2a5a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2a5b0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
2a5c0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2a5d0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2a5e0 0a 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e  .  assert( !pC->
2a5f0 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e  nullRow || pOp->
2a600 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f  opcode==OP_IdxRo
2a610 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  wid );..  /* The
2a620 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53 65   IdxRowid and Se
2a630 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20 63  ek opcodes are c
2a640 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65 20  ombined because 
2a650 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69  of the commonali
2a660 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74  ty.  ** of sqlit
2a670 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
2a680 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74 65  ore() and sqlite
2a690 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 29 2e  3VdbeIdxRowid().
2a6a0 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
2a6b0 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
2a6c0 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73  ore(pC);..  /* s
2a6d0 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72 52  qlite3VbeCursorR
2a6e0 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c  estore() can onl
2a6f0 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72 65  y fail if the re
2a700 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64 65  cord has been de
2a710 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66  leted.  ** out f
2a720 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75  rom under the cu
2a730 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c  rsor.  That will
2a740 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20 66   never happens f
2a750 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20  or an IdxRowid. 
2a760 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f   ** or Seek opco
2a770 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45  de */.  if( NEVE
2a780 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
2a790 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2a7a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
2a7b0 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
2a7c0 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30  ){.    rowid = 0
2a7d0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2a7e0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
2a7f0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2a800 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2a810 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2a820 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43  id(db, pC->uc.pC
2a830 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a  ursor, &rowid);.
2a840 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
2a850 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
2a860 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2a870 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
2a880 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2a890 65 3d 3d 4f 50 5f 53 65 65 6b 20 29 7b 0a 20 20  e==OP_Seek ){.  
2a8a0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2a8b0 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2a8c0 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2a8d0 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2a8e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2a8f0 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2a900 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2a910 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2a920 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2a930 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2a940 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2a950 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2a960 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2a970 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2a980 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2a990 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2a9a0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2a9b0 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2a9c0 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2a9d0 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2a9e0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2a9f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2aa00 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2aa10 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2aa20 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2aa30 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2aa40 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2aa50 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2aa60 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2aa70 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2aa80 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2aa90 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2aaa0 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2aab0 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 4f   rowid;.      pO
2aac0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2aad0 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  Int;.    }.  }el
2aae0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2aaf0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ab00 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  IdxRowid );.    
2ab10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2ab20 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d  tNull(&aMem[pOp-
2ab30 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2]);.  }.  bre
2ab40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ab50 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
2ab60 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2ab70 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2ab80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2ab90 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2aba0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2abb0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2abc0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2abd0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2abe0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2abf0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2ac00 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2ac10 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2ac20 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2ac30 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2ac40 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2ac50 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2ac60 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2ac70 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2ac80 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2ac90 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2aca0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2acb0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2acc0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2acd0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2ace0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2acf0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2ad00 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2ad10 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
2ad20 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2ad30 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2ad40 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2ad50 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2ad60 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2ad70 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2ad80 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2ad90 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2ada0 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2adb0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2adc0 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2add0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2ade0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2adf0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2ae00 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2ae10 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2ae20 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2ae30 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2ae40 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2ae50 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
2ae60 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
2ae70 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
2ae80 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2ae90 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2aea0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2aeb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2aec0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
2aed0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2aee0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2aef0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2af00 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2af10 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2af20 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2af30 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2af40 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2af50 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2af60 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2af70 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2af80 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2af90 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2afa0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2afb0 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2afc0 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2afd0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2afe0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2aff0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2b000 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
2b010 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2b020 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
2b030 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2b040 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2b050 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2b060 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2b070 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2b080 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2b090 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2b0a0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2b0b0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2b0c0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2b0d0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2b0e0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2b0f0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2b100 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2b110 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2b120 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2b130 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2b140 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2b150 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2b160 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2b170 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2b180 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2b190 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2b1a0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2b1b0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
2b1c0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2b1d0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
2b1e0 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
2b1f0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2b200 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2b210 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2b220 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
2b230 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2b240 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
2b250 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2b260 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
2b270 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2b280 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2b290 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
2b2a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2b2b0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
2b2c0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2b2d0 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2b2e0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2b2f0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2b300 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2b310 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2b320 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2b330 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2b340 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
2b350 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2b360 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2b370 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2b380 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2b390 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
2b3a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2b3b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2b3c0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2b3d0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
2b3e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b3f0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2b400 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2b410 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2b420 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2b430 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2b440 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
2b450 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
2b460 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2b470 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2b480 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2b490 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
2b4a0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
2b4b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2b4c0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2b4d0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2b4e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2b4f0 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
2b500 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2b510 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
2b520 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
2b530 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2b540 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
2b550 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
2b560 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
2b570 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
2b580 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
2b590 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
2b5a0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2b5b0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2b5c0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2b5d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2b5e0 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
2b5f0 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
2b600 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
2b610 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
2b620 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
2b630 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
2b640 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
2b650 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
2b660 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
2b670 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2b680 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2b690 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2b6a0 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2b6b0 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
2b6c0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2b6d0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2b6e0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2b6f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2b700 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
2b710 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2b720 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
2b730 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2b740 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2b750 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  or;.  if( res>0 
2b760 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2b770 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2b780 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
2b790 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
2b7a0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
2b7b0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
2b7c0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
2b7d0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
2b7e0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2b7f0 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
2b800 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
2b810 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
2b820 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
2b830 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2b840 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
2b850 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
2b860 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2b870 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2b880 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2b890 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2b8a0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2b8b0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2b8c0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2b8d0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2b8e0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
2b8f0 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
2b900 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
2b910 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
2b920 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
2b930 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
2b940 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
2b950 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
2b960 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
2b970 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
2b980 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
2b990 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
2b9a0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
2b9b0 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
2b9c0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
2b9d0 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
2b9e0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
2b9f0 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
2ba00 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2ba10 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
2ba20 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
2ba30 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
2ba40 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
2ba50 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
2ba60 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
2ba70 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
2ba80 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
2ba90 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
2baa0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2bab0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
2bac0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
2bad0 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
2bae0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
2baf0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2bb00 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
2bb10 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
2bb20 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
2bb30 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
2bb40 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
2bb50 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2bb60 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2bb70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31  ssert( pOp->p1>1
2bb80 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
2bb90 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2bba0 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
2bbb0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2bbc0 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65   if( db->nVdbeRe
2bbd0 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72  ad > db->nVDestr
2bbe0 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  oy+1 ){.    rc =
2bbf0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
2bc00 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
2bc10 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
2bc20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2bc30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65  e_to_error;.  }e
2bc40 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
2bc50 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
2bc60 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2bc70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
2bc80 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
2bc90 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2bca0 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
2bcb0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2bcc0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2bcd0 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
2bce0 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
2bcf0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
2bd00 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
2bd10 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2bd20 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
2bd30 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69   = iMoved;.    i
2bd40 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2bd50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2bd60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bd70 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2bd80 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d      if( iMoved!=
2bd90 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2bda0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2bdb0 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
2bdc0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
2bdd0 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
2bde0 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
2bdf0 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
2be00 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
2be10 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
2be20 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
2be30 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2be40 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
2be50 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
2be60 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
2be70 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2be80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2be90 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
2bea0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
2beb0 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2bec0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2bed0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2bee0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
2bef0 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
2bf00 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
2bf10 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
2bf20 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
2bf30 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
2bf40 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2bf50 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
2bf60 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2bf70 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2bf80 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
2bf90 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2bfa0 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
2bfb0 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
2bfc0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2bfd0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2bfe0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2bff0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2c000 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2c010 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2c020 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2c030 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2c040 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
2c050 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2c060 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
2c070 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
2c080 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
2c090 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
2c0a0 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
2c0b0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
2c0c0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
2c0d0 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
2c0e0 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2c0f0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2c100 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2c110 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
2c120 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
2c130 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
2c140 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
2c150 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
2c160 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
2c170 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2c180 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2c190 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2c1a0 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
2c1b0 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
2c1c0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
2c1d0 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
2c1e0 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
2c1f0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2c200 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2c210 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2c220 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2c230 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2c240 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2c250 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2c260 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2c270 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2c280 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2c290 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2c2a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2c2b0 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2c2c0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2c2d0 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2c2e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2c2f0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2c300 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2c310 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2c320 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2c330 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2c340 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2c350 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2c360 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2c370 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c380 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2c390 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c3a0 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
2c3b0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
2c3c0 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2c3d0 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
2c3e0 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
2c3f0 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
2c400 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
2c410 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
2c420 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
2c430 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
2c440 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
2c450 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
2c460 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
2c470 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
2c480 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
2c490 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
2c4a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2c4b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c4c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2c4d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2c4e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2c4f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2c500 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
2c510 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2c520 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2c530 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c  eSorterReset(db,
2c540 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29   pC->uc.pSorter)
2c550 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2c560 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2c570 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2c580 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EE );.    assert
2c590 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
2c5a0 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
2c5b0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
2c5c0 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
2c5d0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2c5e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2c5f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c600 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2c610 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2c620 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
2c630 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2c640 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
2c650 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
2c660 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65  cate a new table
2c670 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
2c680 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2c690 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
2c6a0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2c6b0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2c6c0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
2c6d0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
2c6e0 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
2c6f0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
2c700 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
2c710 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
2c720 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
2c730 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
2c740 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61  etween a table a
2c750 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74  nd an index is t
2c760 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75  his:  A table mu
2c770 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62  st.** have a 4-b
2c780 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  yte integer key 
2c790 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62  and can have arb
2c7a0 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e  itrary data.  An
2c7b0 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e   index.** has an
2c7c0 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62   arbitrary key b
2c7d0 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a  ut no data..**.*
2c7e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61  * See also: Crea
2c7f0 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70  teIndex.*/./* Op
2c800 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65  code: CreateInde
2c810 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2c820 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2c830 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
2c840 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
2c850 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
2c860 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2c870 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2c880 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
2c890 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2c8a0 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2c8b0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2c8c0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2c8d0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
2c8e0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2c8f0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
2c900 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
2c910 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
2c920 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
2c930 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
2c940 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
2c950 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
2c960 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
2c970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2c980 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  t2 */.case OP_Cr
2c990 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
2c9a0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2c9b0 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
2c9c0 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
2c9d0 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  pDb;..  pOut = o
2c9e0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2c9f0 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20   pOp);.  pgno = 
2ca00 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2ca10 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2ca20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2ca30 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2ca40 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2ca50 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
2ca60 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2ca70 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
2ca80 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
2ca90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
2caa0 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
2cab0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2cac0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
2cad0 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
2cae0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
2caf0 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
2cb00 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
2cb10 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
2cb20 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a   BTREE_BLOBKEY;.
2cb30 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
2cb40 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
2cb50 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
2cb60 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69 66  no, flags);.  if
2cb70 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2cb80 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2cb90 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
2cba0 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
2cbb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
2cbc0 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
2cbd0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
2cbe0 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
2cbf0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
2cc00 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
2cc10 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
2cc20 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
2cc30 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
2cc40 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4. .**.** This o
2cc50 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
2cc60 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
2cc70 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
2cc80 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
2cc90 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
2cca0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
2ccb0 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
2ccc0 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
2ccd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
2cce0 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
2ccf0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
2cd00 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
2cd10 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
2cd20 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
2cd30 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
2cd40 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
2cd50 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
2cd60 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
2cd70 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
2cd80 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
2cd90 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
2cda0 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
2cdb0 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
2cdc0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
2cdd0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
2cde0 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
2cdf0 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
2ce00 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
2ce10 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
2ce20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
2ce30 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
2ce40 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
2ce50 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
2ce60 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
2ce70 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
2ce80 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2ce90 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
2cea0 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
2ceb0 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
2cec0 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65  .  /* Used to be
2ced0 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a   a conditional *
2cee0 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20  / {.    zMaster 
2cef0 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
2cf00 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  Db);.    initDat
2cf10 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
2cf20 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
2cf30 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
2cf40 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
2cf50 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
2cf60 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
2cf70 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
2cf80 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
2cf90 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
2cfa0 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
2cfb0 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
2cfc0 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
2cfd0 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a  Db[iDb].zName, z
2cfe0 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
2cff0 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
2d000 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
2d010 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  = SQLITE_NOMEM_B
2d020 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
2d030 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
2d040 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
2d050 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
2d060 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
2d070 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
2d080 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
2d090 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
2d0a0 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
2d0b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
2d0c0 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
2d0d0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
2d0e0 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
2d0f0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2d100 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
2d110 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
2d120 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
2d130 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
2d140 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
2d150 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
2d160 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2d170 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
2d180 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
2d190 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69 66 28  ion(db);.    if(
2d1a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
2d1b0 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  M ){.      goto 
2d1c0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
2d1d0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
2d1e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2d1f0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
2d200 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2d210 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
2d220 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
2d230 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
2d240 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
2d250 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
2d260 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
2d270 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
2d280 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
2d290 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
2d2a0 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
2d2b0 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
2d2c0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
2d2d0 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
2d2e0 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
2d2f0 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
2d300 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
2d310 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
2d320 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
2d330 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2d340 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2d350 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
2d360 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2d370 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
2d380 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2d390 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d3a0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d  or;.  break;  .}
2d3b0 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
2d3c0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2d3d0 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20  ANALYZE) */../* 
2d3e0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
2d3f0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2d400 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2d410 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2d420 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2d430 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2d440 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
2d450 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2d460 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2d470 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2d480 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
2d490 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2d4a0 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2d4b0 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
2d4c0 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
2d4d0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
2d4e0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2d4f0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
2d500 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
2d510 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
2d520 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
2d530 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2d540 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
2d550 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
2d560 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2d570 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2d580 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
2d590 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2d5a0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2d5b0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2d5c0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2d5d0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2d5e0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
2d5f0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2d600 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2d610 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
2d620 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2d630 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2d640 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2d650 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20  de).** in order 
2d660 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
2d670 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2d680 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2d690 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2d6a0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2d6b0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2d6c0 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
2d6d0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2d6e0 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
2d6f0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2d700 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2d710 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2d720 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
2d730 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
2d740 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
2d750 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
2d760 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
2d770 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
2d780 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
2d790 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2d7a0 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2d7b0 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
2d7c0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2d7d0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2d7e0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2d7f0 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
2d800 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
2d810 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2d820 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2d830 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2d840 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2d850 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2d860 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
2d870 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
2d880 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
2d890 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2d8a0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2d8b0 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
2d8c0 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2d8d0 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
2d8e0 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
2d8f0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2d900 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
2d910 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
2d920 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
2d930 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
2d940 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2d950 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
2d960 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
2d970 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
2d980 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
2d990 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
2d9a0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
2d9b0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2d9c0 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2d9d0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2d9e0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2d9f0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
2da00 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
2da10 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
2da20 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
2da30 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
2da40 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
2da50 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
2da60 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
2da70 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
2da80 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
2da90 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
2daa0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2dab0 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
2dac0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2dad0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
2dae0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2daf0 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20  are integers.** 
2db00 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54  stored in P4_INT
2db10 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a  ARRAY argument..
2db20 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2db30 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
2db40 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
2db50 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2db60 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
2db70 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2db80 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2db90 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
2dba0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
2dbb0 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
2dbc0 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
2dbd0 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
2dbe0 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
2dbf0 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
2dc00 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
2dc10 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
2dc20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
2dc30 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
2dc40 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
2dc50 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
2dc60 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
2dc70 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
2dc80 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
2dc90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
2dca0 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
2dcb0 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
2dcc0 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
2dcd0 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
2dce0 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
2dcf0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
2dd00 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
2dd10 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
2dd20 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
2dd30 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
2dd40 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
2dd50 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  aRoot = pOp-
2dd60 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74  >p4.ai;.  assert
2dd70 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61  ( nRoot>0 );.  a
2dd80 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 6e 52 6f  ssert( aRoot[nRo
2dd90 6f 74 5d 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ot]==0 );.  asse
2dda0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2ddb0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2ddc0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
2ddd0 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
2dde0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2ddf0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2de00 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2de10 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
2de20 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2de30 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2de40 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
2de50 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2de60 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2de70 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
2de80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2de90 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2dea0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
2deb0 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
2dec0 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
2ded0 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
2dee0 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
2def0 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df10 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
2df20 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
2df30 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d  .  pnErr->u.i -=
2df40 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33   nErr;.  sqlite3
2df50 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2df60 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
2df70 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
2df80 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
2df90 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
2dfa0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2dfb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
2dfc0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2dfd0 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
2dfe0 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
2dff0 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
2e000 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2e010 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
2e020 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2e030 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
2e040 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2e050 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e060 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2e070 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
2e080 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
2e090 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
2e0a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77  * Synopsis:  row
2e0b0 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a  set(P1)=r[P2].**
2e0c0 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
2e0d0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
2e0e0 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
2e0f0 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20   into a boolean 
2e100 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e  index.** held in
2e110 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2e120 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
2e130 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
2e140 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
2e150 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2e160 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
2e170 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
2e180 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2e190 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
2e1a0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2e1b0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
2e1c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2e1d0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
2e1e0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2e1f0 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2e200 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2e210 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2e220 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2e230 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2e240 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2e250 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _mem;.  }.  sqli
2e260 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2e270 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2e280 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
2e290 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2e2a0 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
2e2b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2e2c0 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
2e2d0 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a  rowset(P1).**.**
2e2e0 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61   Extract the sma
2e2f0 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d  llest value from
2e300 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2e310 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  1 and put that v
2e320 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  alue into.** reg
2e330 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69  ister P3.  Or, i
2e340 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  f boolean index 
2e350 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
2e360 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a  empty, leave P3.
2e370 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  ** unchanged and
2e380 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
2e390 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
2e3a0 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20   OP_RowSetRead: 
2e3b0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
2e3c0 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in1, out3 */.  
2e3d0 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31  i64 val;..  pIn1
2e3e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2e3f0 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
2e400 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2e410 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71  et)==0 .   || sq
2e420 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
2e430 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2e440 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
2e450 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
2e460 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
2e470 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
2e480 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2e490 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  n1);.    VdbeBra
2e4a0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
2e4b0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2e4c0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2e4d0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
2e4e0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
2e4f0 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
2e500 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
2e510 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2e520 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73  aken(0,2);.    s
2e530 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2e540 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
2e550 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
2e560 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2e570 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2e580 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2e590 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
2e5a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2e5b0 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
2e5c0 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
2e5d0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
2e5e0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
2e5f0 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
2e600 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
2e610 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
2e620 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
2e630 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
2e640 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
2e650 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
2e660 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
2e670 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
2e680 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
2e690 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
2e6a0 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
2e6b0 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
2e6c0 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
2e6d0 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
2e6e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
2e6f0 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
2e700 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
2e710 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
2e720 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
2e730 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
2e740 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
2e750 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
2e760 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
2e770 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
2e780 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
2e790 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
2e7a0 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
2e7b0 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
2e7c0 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
2e7d0 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
2e7e0 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
2e7f0 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
2e800 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
2e810 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
2e820 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
2e830 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
2e840 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
2e850 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
2e860 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
2e870 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
2e880 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
2e890 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
2e8a0 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
2e8b0 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
2e8c0 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
2e8d0 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
2e8e0 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
2e8f0 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
2e900 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
2e910 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
2e920 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
2e930 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
2e940 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
2e950 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
2e960 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
2e970 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
2e980 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
2e990 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
2e9a0 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
2e9b0 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2e9c0 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
2e9d0 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
2e9e0 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
2e9f0 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
2ea00 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
2ea10 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
2ea20 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2ea30 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2ea40 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
2ea50 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
2ea60 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
2ea70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2ea80 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
2ea90 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
2eaa0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
2eab0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
2eac0 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
2ead0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2eae0 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
2eaf0 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
2eb00 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
2eb10 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
2eb20 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
2eb30 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
2eb40 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
2eb50 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
2eb60 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2eb70 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2eb80 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2eb90 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2eba0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2ebb0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2ebc0 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2ebd0 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
2ebe0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2ebf0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2ec00 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
2ec10 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
2ec20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
2ec30 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
2ec40 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
2ec50 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65  ->u.pRowSet, iSe
2ec60 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
2ec70 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2ec80 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
2ec90 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
2eca0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2ecb0 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65  2;.  }.  if( iSe
2ecc0 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
2ecd0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2ece0 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2ecf0 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d   pIn3->u.i);.  }
2ed00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69  .  break;.}...#i
2ed10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ed20 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70  T_TRIGGER../* Op
2ed30 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31  code: Program P1
2ed40 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2ed50 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74  ** Execute the t
2ed60 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70  rigger program p
2ed70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70  assed as P4 (typ
2ed80 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29  e P4_SUBPROGRAM)
2ed90 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74  . .**.** P1 cont
2eda0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2edb0 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
2edc0 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
2edd0 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f  s the first memo
2ede0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61  ry .** cell in a
2edf0 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65  n array of value
2ee00 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65  s used as argume
2ee10 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70  nts to the sub-p
2ee20 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63  rogram. P2 .** c
2ee30 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2ee40 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69  ess to jump to i
2ee50 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  f the sub-progra
2ee60 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f  m throws an IGNO
2ee70 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e  RE .** exception
2ee80 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45   using the RAISE
2ee90 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67  () function. Reg
2eea0 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
2eeb0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a  s the address .*
2eec0 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65  * of a memory ce
2eed0 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20  ll in this (the 
2eee0 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20  parent) VM that 
2eef0 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63  is used to alloc
2ef00 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f  ate the .** memo
2ef10 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ry required by t
2ef20 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72  he sub-vdbe at r
2ef30 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34  untime..**.** P4
2ef40 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2ef50 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69   the VM containi
2ef60 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ng the trigger p
2ef70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  rogram..**.** If
2ef80 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P5 is non-zero,
2ef90 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
2efa0 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69  program invocati
2efb0 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a  on is enabled..*
2efc0 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61  /.case OP_Progra
2efd0 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
2efe0 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ump */.  int nMe
2eff0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2f000 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
2f010 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66  mory registers f
2f020 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2f030 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20  /.  int nByte;  
2f040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
2f050 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20  ytes of runtime 
2f060 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
2f070 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  or sub-program *
2f080 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20  /.  Mem *pRt;   
2f090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2f0a0 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63  egister to alloc
2f0b0 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63  ate runtime spac
2f0c0 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  e */.  Mem *pMem
2f0d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2f0e0 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74  * Used to iterat
2f0f0 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79  e through memory
2f100 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20   cells */.  Mem 
2f110 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
2f120 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f      /* Last memo
2f130 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61  ry cell in new a
2f140 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72  rray */.  VdbeFr
2f150 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
2f160 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72    /* New vdbe fr
2f170 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69  ame to execute i
2f180 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  n */.  SubProgra
2f190 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
2f1a0 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f  * Sub-program to
2f1b0 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f   execute */.  vo
2f1c0 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20  id *t;          
2f1d0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69        /* Token i
2f1e0 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67  dentifying trigg
2f1f0 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61  er */..  pProgra
2f200 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f  m = pOp->p4.pPro
2f210 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61  gram;.  pRt = &a
2f220 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2f230 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2f240 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20  ->nOp>0 );.  .  
2f250 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61  /* If the p5 fla
2f260 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  g is clear, then
2f270 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
2f280 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
2f290 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  s is .  ** disab
2f2a0 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64  led for backward
2f2b0 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
2f2c0 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68  (p5 is set if th
2f2d0 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20  is sub-program. 
2f2e0 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20   ** is really a 
2f2f0 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66  trigger, not a f
2f300 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
2f310 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20  n, and the flag 
2f320 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65  set.  ** and cle
2f330 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41  ared by the "PRA
2f340 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72  GMA recursive_tr
2f350 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20  iggers" command 
2f360 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20  is clear)..  ** 
2f370 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75  .  ** It is recu
2f380 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2f390 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74   of triggers, at
2f3a0 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20   the SQL level, 
2f3b0 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69  that is .  ** di
2f3c0 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20  sabled. In some 
2f3d0 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74  cases a single t
2f3e0 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72  rigger may gener
2f3f0 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ate more than on
2f400 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72  e .  ** SubProgr
2f410 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67  am (if the trigg
2f420 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74  er may be execut
2f430 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61  ed with more tha
2f440 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20  n one different 
2f450 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43  .  ** ON CONFLIC
2f460 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75  T algorithm). Su
2f470 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75  bProgram structu
2f480 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  res associated w
2f490 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c  ith a.  ** singl
2f4a0 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61  e trigger all ha
2f4b0 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
2f4c0 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f  e for the SubPro
2f4d0 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a  gram.token .  **
2f4e0 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20   variable.  */. 
2f4f0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
2f500 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d      t = pProgram
2f510 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72  ->token;.    for
2f520 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
2f530 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72  e; pFrame && pFr
2f540 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70  ame->token!=t; p
2f550 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2f560 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20  arent);.    if( 
2f570 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a  pFrame ) break;.
2f580 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46    }..  if( p->nF
2f590 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74  rame>=db->aLimit
2f5a0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52  [SQLITE_LIMIT_TR
2f5b0 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a  IGGER_DEPTH] ){.
2f5c0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2f5d0 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
2f5e0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
2f5f0 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20  too many levels 
2f600 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72  of trigger recur
2f610 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f  sion");.    goto
2f620 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2f630 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  ror;.  }..  /* R
2f640 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75  egister pRt is u
2f650 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
2f660 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2f670 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61   to save the sta
2f680 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63  te.  ** of the c
2f690 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20  urrent program, 
2f6a0 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  and the memory r
2f6b0 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69  equired at runti
2f6c0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  me to execute.  
2f6d0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70  ** the trigger p
2f6e0 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20  rogram. If this 
2f6f0 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e  trigger has been
2f700 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74   fired before, t
2f710 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73  hen pRt .  ** is
2f720 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74   already allocat
2f730 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
2f740 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  t must be initia
2f750 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28  lized.  */.  if(
2f760 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d   (pRt->flags&MEM
2f770 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20  _Frame)==0 ){.  
2f780 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
2f790 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
2f7a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
2f7b0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
2f7c0 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
2f7d0 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
2f7e0 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
2f7f0 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
2f800 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
2f810 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
2f820 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
2f830 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
2f840 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
2f850 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
2f860 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
2f870 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
2f880 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
2f890 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
2f8a0 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
2f8b0 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
2f8c0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
2f8d0 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29  assert( nMem>0 )
2f8e0 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67 72  ;.    if( pProgr
2f8f0 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d  am->nCsr==0 ) nM
2f900 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20  em++;.    nByte 
2f910 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
2f920 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
2f930 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
2f940 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
2f960 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
2f970 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
2f980 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  r *).           
2f990 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e     + pProgram->n
2f9a0 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38  Once * sizeof(u8
2f9b0 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  );.    pFrame = 
2f9c0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
2f9d0 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a  ero(db, nByte);.
2f9e0 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20      if( !pFrame 
2f9f0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2fa00 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2fa10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
2fa20 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20  lease(pRt);.    
2fa30 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  pRt->flags = MEM
2fa40 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d  _Frame;.    pRt-
2fa50 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  >u.pFrame = pFra
2fa60 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d  me;..    pFrame-
2fa70 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61  >v = p;.    pFra
2fa80 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20  me->nChildMem = 
2fa90 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2faa0 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50  ->nChildCsr = pP
2fab0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2fac0 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28    pFrame->pc = (
2fad0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
2fae0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65  .    pFrame->aMe
2faf0 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
2fb00 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20   pFrame->nMem = 
2fb10 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->nMem;.    pFr
2fb20 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e  ame->apCsr = p->
2fb30 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d  apCsr;.    pFram
2fb40 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e  e->nCursor = p->
2fb50 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72  nCursor;.    pFr
2fb60 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f  ame->aOp = p->aO
2fb70 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
2fb80 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20  Op = p->nOp;.   
2fb90 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d   pFrame->token =
2fba0 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2fbb0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f  ;.    pFrame->aO
2fbc0 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e  nceFlag = p->aOn
2fbd0 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61  ceFlag;.    pFra
2fbe0 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20  me->nOnceFlag = 
2fbf0 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69  p->nOnceFlag;.#i
2fc00 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2fc10 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2fc20 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
2fc30 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
2fc40 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70  c;.#endif..    p
2fc50 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65  End = &VdbeFrame
2fc60 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61  Mem(pFrame)[pFra
2fc70 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a  me->nChildMem];.
2fc80 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62      for(pMem=Vdb
2fc90 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
2fca0 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70  ); pMem!=pEnd; p
2fcb0 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d  Mem++){.      pM
2fcc0 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  em->flags = MEM_
2fcd0 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20  Undefined;.     
2fce0 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a   pMem->db = db;.
2fcf0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2fd00 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d     pFrame = pRt-
2fd10 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61  >u.pFrame;.    a
2fd20 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
2fd30 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
2fd40 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2fd50 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20  hildMem .       
2fd60 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e   || (pProgram->n
2fd70 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72  Csr==0 && pProgr
2fd80 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61  am->nMem+1==pFra
2fd90 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29  me->nChildMem) )
2fda0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
2fdb0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
2fdc0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
2fdd0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
2fde0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d  int)(pOp - aOp)=
2fdf0 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
2fe00 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
2fe10 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
2fe20 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
2fe30 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
2fe40 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
2fe50 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  d;.  pFrame->nCh
2fe60 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
2fe70 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62  e;.  pFrame->nDb
2fe80 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e  Change = p->db->
2fe90 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65 72  nChange;.  asser
2fea0 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44  t( pFrame->pAuxD
2feb0 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72 61  ata==0 );.  pFra
2fec0 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 70  me->pAuxData = p
2fed0 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20 70 2d  ->pAuxData;.  p-
2fee0 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b 0a 20  >pAuxData = 0;. 
2fef0 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
2ff00 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
2ff10 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
2ff20 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65 46 72   = aMem = VdbeFr
2ff30 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 0a  ameMem(pFrame);.
2ff40 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61    p->nMem = pFra
2ff50 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20  me->nChildMem;. 
2ff60 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75   p->nCursor = (u
2ff70 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  16)pFrame->nChil
2ff80 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  dCsr;.  p->apCsr
2ff90 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a   = (VdbeCursor *
2ffa0 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d  *)&aMem[p->nMem]
2ffb0 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70  ;.  p->aOp = aOp
2ffc0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70   = pProgram->aOp
2ffd0 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72  ;.  p->nOp = pPr
2ffe0 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d  ogram->nOp;.  p-
2fff0 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38  >aOnceFlag = (u8
30000 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e   *)&p->apCsr[p->
30010 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e  nCursor];.  p->n
30020 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67  OnceFlag = pProg
30030 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64  ram->nOnce;.#ifd
30040 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
30050 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
30060 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30  .  p->anExec = 0
30070 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d  ;.#endif.  pOp =
30080 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 6d 65 6d   &aOp[-1];.  mem
30090 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  set(p->aOnceFlag
300a0 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  , 0, p->nOnceFla
300b0 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  g);..  break;.}.
300c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61  ./* Opcode: Para
300d0 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
300e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
300f0 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65  is only ever pre
30100 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67  sent in sub-prog
30110 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20  rams called via 
30120 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72  the .** OP_Progr
30130 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  am instruction. 
30140 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72  Copy a value cur
30150 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e  rently stored in
30160 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65   a memory .** ce
30170 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  ll of the callin
30180 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65  g (parent) frame
30190 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74   to cell P2 in t
301a0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
301b0 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70  s .** address sp
301c0 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65  ace. This is use
301d0 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
301e0 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20  grams to access 
301f0 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e  the new.* .** an
30200 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a  d old.* values..
30210 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73  **.** The addres
30220 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e  s of the cell in
30230 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
30240 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
30250 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65  by adding.** the
30260 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
30270 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
30280 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
30290 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
302a0 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  .** calling OP_P
302b0 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
302c0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
302d0 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  aram: {         
302e0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
302f0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
30300 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
30310 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
30320 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
30330 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
30340 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
30350 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
30360 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
30370 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
30380 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
30390 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
303a0 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
303b0 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
303c0 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
303d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
303e0 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
303f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30400 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
30410 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
30420 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
30430 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
30440 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
30450 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
30460 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
30470 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
30480 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
30490 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
304a0 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
304b0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
304c0 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
304d0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
304e0 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
304f0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
30500 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
30510 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
30520 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
30530 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
30540 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
30550 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
30560 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
30570 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
30580 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
30590 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
305a0 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
305b0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
305c0 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
305d0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
305e0 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
305f0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
30600 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
30610 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
30620 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
30630 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
30640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
30650 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
30660 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
30670 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
30680 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
30690 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
306a0 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
306b0 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
306c0 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
306d0 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
306e0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
306f0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
30700 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
30710 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
30720 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
30730 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
30740 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
30750 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
30760 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
30770 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
30780 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
30790 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
307a0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
307b0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
307c0 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
307d0 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
307e0 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
307f0 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
30800 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
30810 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
30820 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
30830 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
30840 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
30850 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
30860 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
30870 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
30880 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
30890 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
308a0 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
308b0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
308c0 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
308d0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
308e0 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
308f0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
30900 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
30910 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
30920 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
30930 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
30940 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
30950 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
30960 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e  2);.    if( p->n
30970 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
30980 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
30990 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
309a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
309b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
309c0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
309d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
309e0 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
309f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
30a00 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
30a10 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
30a20 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
30a30 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
30a40 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
30a50 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
30a60 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
30a70 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
30a80 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
30a90 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
30aa0 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
30ab0 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
30ac0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
30ad0 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
30ae0 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
30af0 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
30b00 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
30b10 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
30b20 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
30b30 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
30b40 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
30b50 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
30b60 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
30b70 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
30b80 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
30b90 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
30ba0 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
30bb0 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
30bc0 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
30bd0 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
30be0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
30bf0 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
30c00 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
30c10 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
30c20 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
30c30 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
30c40 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
30c50 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
30c60 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
30c70 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
30c80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
30c90 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
30ca0 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
30cb0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
30cc0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
30cd0 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
30ce0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
30cf0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
30d00 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
30d10 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
30d20 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
30d30 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
30d40 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
30d50 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
30d60 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
30d70 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
30d80 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
30d90 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
30da0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
30db0 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50  >0 then r[P1]-=P
30dc0 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3, goto P2.**.**
30dd0 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
30de0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
30df0 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20  eger..** If the 
30e00 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
30e10 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
30e20 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50  ater, subtract P
30e30 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61  3 from the.** va
30e40 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75  lue in P1 and ju
30e50 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
30e60 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76  If the initial v
30e70 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
30e80 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
30e90 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20   1, then the.** 
30ea0 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67  value is unchang
30eb0 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70  ed and control p
30ec0 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f  asses through to
30ed0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
30ee0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
30ef0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
30f00 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
30f10 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
30f20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
30f30 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
30f40 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
30f50 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
30f60 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
30f70 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
30f80 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  0 ){.    pIn1->u
30f90 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i -= pOp->p3;. 
30fa0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
30fb0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
30fc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
30fd0 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32  ffsetLimit P1 P2
30fe0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
30ff0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
31000 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  then r[P2]=r[P1]
31010 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c  +max(0,r[P3]) el
31020 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a  se r[P2]=(-1).**
31030 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31040 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f  performs a commo
31050 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61  nly used computa
31060 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
31070 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e  with.** LIMIT an
31080 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73  d OFFSET process
31090 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74  .  r[P1] holds t
310a0 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72  he limit counter
310b0 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64  .  r[P3].** hold
310c0 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75  s the offset cou
310d0 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64  nter.  The opcod
310e0 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63  e computes the c
310f0 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a  ombined value.**
31100 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e   of the LIMIT an
31110 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f  d OFFSET and sto
31120 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69  res that value i
31130 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b  n r[P2].  The r[
31140 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d  P2].** value com
31150 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74  puted is the tot
31160 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
31170 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64  s that will need
31180 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65   to be.** visite
31190 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  d in order to co
311a0 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79  mplete the query
311b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d  ..**.** If r[P3]
311c0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
311d0 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
311e0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46   there is no OFF
311f0 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d  SET.** and r[P2]
31200 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
31210 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c  e value of the L
31220 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a  IMIT, r[P1]..**.
31230 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a  ** if r[P1] is z
31240 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
31250 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
31260 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a  e is no LIMIT.**
31270 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65   and r[P2] is se
31280 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20  t to -1. .**.** 
31290 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d  Otherwise, r[P2]
312a0 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73   is set to the s
312b0 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20  um of r[P1] and 
312c0 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  r[P3]..*/.case O
312d0 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b  P_OffsetLimit: {
312e0 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32      /* in1, out2
312f0 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 31 20  , in3 */.  pIn1 
31300 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
31310 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
31320 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75  [pOp->p3];.  pOu
31330 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
31340 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
31350 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
31360 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
31370 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
31380 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
31390 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
313a0 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30 20 3f 20 2d  pIn1->u.i<=0 ? -
313b0 31 20 3a 20 70 49 6e 31 2d 3e 75 2e 69 2b 28 70  1 : pIn1->u.i+(p
313c0 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d  In3->u.i>0?pIn3-
313d0 3e 75 2e 69 3a 30 29 3b 0a 20 20 62 72 65 61 6b  >u.i:0);.  break
313e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
313f0 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20  IfNotZero P1 P2 
31400 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
31410 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20  is: if r[P1]!=0 
31420 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20  then r[P1]-=P3, 
31430 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
31440 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
31450 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
31460 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65  r.  If the conte
31470 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
31480 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c  1 is.** initiall
31490 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e 20  y nonzero, then 
314a0 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d  subtract P3 from
314b0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
314c0 67 69 73 74 65 72 20 50 31 20 61 6e 64 0a 2a 2a  gister P1 and.**
314d0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66   jump to P2.  If
314e0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
314f0 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20  initially zero, 
31500 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67  leave it unchang
31510 65 64 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20 74  ed.** and fall t
31520 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20  hrough..*/.case 
31530 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20  OP_IfNotZero: { 
31540 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
31550 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
31560 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
31570 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
31580 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
31590 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
315a0 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20  en(pIn1->u.i<0, 
315b0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
315c0 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e 31  u.i ){.     pIn1
315d0 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
315e0 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ;.     goto jump
315f0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
31600 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
31610 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20  e: DecrJumpZero 
31620 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
31630 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72  ynopsis: if (--r
31640 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32  [P1])==0 goto P2
31650 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
31660 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20  P1 must hold an 
31670 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d  integer.  Decrem
31680 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
31690 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
316a0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20  then jump to P2 
316b0 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
316c0 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
316d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
316e0 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
316f0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
31700 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
31710 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31720 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
31730 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49  &MEM_Int );.  pI
31740 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62  n1->u.i--;.  Vdb
31750 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
31760 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
31770 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
31780 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
31790 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
317a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
317b0 70 5a 65 72 6f 49 6e 63 72 20 50 31 20 50 32 20  pZeroIncr P1 P2 
317c0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
317d0 73 3a 20 69 66 20 28 72 5b 50 31 5d 2b 2b 29 3d  s: if (r[P1]++)=
317e0 3d 30 20 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  =0 ) goto P2.**.
317f0 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20  ** The register 
31800 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
31810 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
31820 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69  register P1 is i
31830 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 7a 65 72 6f  nitially.** zero
31840 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
31850 32 2e 20 20 49 6e 63 72 65 6d 65 6e 74 20 72 65  2.  Increment re
31860 67 69 73 74 65 72 20 50 31 20 72 65 67 61 72 64  gister P1 regard
31870 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
31880 6f 72 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 6a 75  or.** not the ju
31890 6d 70 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2f 0a  mp is taken..*/.
318a0 63 61 73 65 20 4f 50 5f 4a 75 6d 70 5a 65 72 6f  case OP_JumpZero
318b0 49 6e 63 72 3a 20 7b 20 20 20 20 20 20 20 20 2f  Incr: {        /
318c0 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
318d0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
318e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
318f0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
31900 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
31910 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
31920 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  >u.i==0, 2);.  i
31930 66 28 20 28 70 49 6e 31 2d 3e 75 2e 69 2b 2b 29  f( (pIn1->u.i++)
31940 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
31950 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
31960 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
31970 67 53 74 65 70 30 20 2a 20 50 32 20 50 33 20 50  gStep0 * P2 P3 P
31980 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
31990 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
319a0 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
319b0 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
319c0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
319d0 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
319e0 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
319f0 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
31a00 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
31a10 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
31a20 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
31a30 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
31a40 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
31a50 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
31a60 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
31a70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
31a80 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
31a90 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
31aa0 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
31ab0 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20  ccessors..*/./* 
31ac0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
31ad0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
31ae0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
31af0 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
31b00 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
31b10 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
31b20 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
31b30 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
31b40 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
31b50 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
31b60 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
31b70 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
31b80 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61  xt.** object tha
31b90 74 20 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e  t is used to run
31ba0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
31bb0 52 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  Register P3 is.*
31bc0 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  * as the accumul
31bd0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
31be0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
31bf0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
31c00 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
31c10 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
31c20 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
31c30 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f   is initially co
31c40 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65  ded as OP_AggSte
31c50 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76  p0.  On first ev
31c60 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65  aluation,.** the
31c70 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20   FuncDef stored 
31c80 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74  in P4 is convert
31c90 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74  ed into an sqlit
31ca0 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a  e3_context and.*
31cb0 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20  * the opcode is 
31cc0 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69  changed.  In thi
31cd0 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69  s way, the initi
31ce0 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
31cf0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  .** sqlite3_cont
31d00 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  ext only happens
31d10 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f   once, instead o
31d20 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74  f on each call t
31d30 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75  o the.** step fu
31d40 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  nction..*/.case 
31d50 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20  OP_AggStep0: {. 
31d60 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65   int n;.  sqlite
31d70 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b  3_context *pCtx;
31d80 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
31d90 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
31da0 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70  DEF );.  n = pOp
31db0 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
31dc0 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
31dd0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
31de0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
31df0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ;.  assert( n==0
31e00 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
31e10 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d  & pOp->p2+n<=(p-
31e20 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
31e30 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
31e40 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
31e50 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
31e60 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
31e70 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44   pCtx = sqlite3D
31e80 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c  bMallocRawNN(db,
31e90 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b   sizeof(*pCtx) +
31ea0 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71   (n-1)*sizeof(sq
31eb0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a  lite3_value*));.
31ec0 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20    if( pCtx==0 ) 
31ed0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
31ee0 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20  Ctx->pMem = 0;. 
31ef0 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
31f00 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
31f10 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
31f20 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
31f30 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
31f40 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
31f50 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
31f60 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
31f70 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
31f80 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pCtx;.  pOp->opc
31f90 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
31fa0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
31fb0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
31fc0 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
31fd0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
31fe0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
31ff0 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
32000 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
32010 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   t;..  assert( p
32020 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
32030 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
32040 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
32050 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
32060 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p3];..  /* 
32070 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  If this function
32080 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20   is inside of a 
32090 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67  trigger, the reg
320a0 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61  ister array in a
320b0 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74  Mem[].  ** might
320c0 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
320d0 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74   evaluation to t
320e0 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65  he next.  The ne
320f0 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
32100 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  .  ** checks to 
32110 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73  see if the regis
32120 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68  ter array has ch
32130 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f  anged, and if so
32140 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69   it.  ** reiniti
32150 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76  alizes the relav
32160 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65  ant parts of the
32170 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
32180 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28   object */.  if(
32190 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70   pCtx->pMem != p
321a0 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Mem ){.    pCtx-
321b0 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20  >pMem = pMem;.  
321c0 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
321d0 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
321e0 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
321f0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
32200 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  ];.  }..#ifdef S
32210 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
32220 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
32230 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
32240 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
32250 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
32260 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
32270 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
32280 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
32290 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
322a0 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c  pMem->n++;.  sql
322b0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28  ite3VdbeMemInit(
322c0 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  &t, db, MEM_Null
322d0 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  );.  pCtx->pOut 
322e0 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45  = &t;.  pCtx->fE
322f0 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
32300 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
32310 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46  = 0;.  (pCtx->pF
32320 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
32330 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
32340 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
32350 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
32360 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
32370 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
32380 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
32390 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
323a0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
323b0 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
323c0 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a  alue_text(&t));.
323d0 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d        rc = pCtx-
323e0 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  >isError;.    }.
323f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
32400 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20  emRelease(&t);. 
32410 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
32420 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
32430 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ror;.  }else{.  
32440 20 20 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67    assert( t.flag
32450 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
32460 20 7d 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73   }.  if( pCtx->s
32470 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
32480 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
32490 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
324a0 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
324b0 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
324c0 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
324d0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
324e0 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  m[i], 1);.  }.  
324f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
32500 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
32510 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
32520 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
32530 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
32540 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
32550 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
32560 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
32570 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
32580 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
32590 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
325a0 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
325b0 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
325c0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
325d0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
325e0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
325f0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
32600 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
32610 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
32620 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
32630 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
32640 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
32650 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
32660 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
32670 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
32680 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
32690 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
326a0 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
326b0 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
326c0 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
326d0 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
326e0 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
326f0 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
32700 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
32710 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
32720 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
32730 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
32740 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
32750 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
32760 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
32770 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
32780 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
32790 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
327a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
327b0 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
327c0 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
327d0 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
327e0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
327f0 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
32800 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
32810 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
32820 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
32830 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
32840 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
32850 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  m));.    goto ab
32860 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
32870 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
32880 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
32890 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
328a0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
328b0 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
328c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
328d0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
328e0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
328f0 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
32900 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
32910 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
32920 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
32930 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
32940 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
32950 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
32960 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
32970 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
32980 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
32990 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
329a0 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
329b0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
329c0 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a  ASSIVE, FULL,.**
329d0 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55   RESTART, or TRU
329e0 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20  NCATE.  Write 1 
329f0 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
32a00 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
32a10 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
32a20 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
32a30 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
32a40 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
32a50 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
32a60 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
32a70 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
32a80 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
32a90 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
32aa0 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
32ab0 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
32ac0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
32ad0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
32ae0 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
32af0 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
32b00 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
32b10 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
32b20 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
32b30 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
32b40 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
32b50 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
32b60 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
32b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b80 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
32b90 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
32ba0 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
32bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
32bc0 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
32bd0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
32be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
32bf0 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
32c00 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
32c10 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
32c20 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
32c30 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
32c40 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
32c50 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
32c60 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
32c70 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
32c80 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
32c90 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
32ca0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
32cb0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
32cc0 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20  OINT_RESTART.   
32cd0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
32ce0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
32cf0 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a  T_TRUNCATE.  );.
32d00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
32d10 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
32d20 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
32d30 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
32d40 5d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ]);.  if( rc ){.
32d50 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
32d60 54 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61  TE_BUSY ) goto a
32d70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
32d80 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  r;.    rc = SQLI
32d90 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
32da0 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
32db0 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
32dc0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
32dd0 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
32de0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
32df0 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
32e00 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
32e10 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
32e20 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
32e30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
32e40 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
32e50 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
32e60 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
32e70 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
32e80 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
32e90 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
32ea0 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
32eb0 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
32ec0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
32ed0 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
32ee0 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
32ef0 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
32f00 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
32f10 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
32f20 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
32f30 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
32f40 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
32f50 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
32f60 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
32f70 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
32f80 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
32f90 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
32fa0 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
32fb0 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
32fc0 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
32fd0 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
32fe0 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
32ff0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
33000 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
33010 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
33020 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  t2 */.  Btree *p
33030 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
33040 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
33050 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
33060 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
33070 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
33080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33090 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
330a0 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
330b0 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
330c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330d0 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
330e0 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
330f0 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
33100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
33110 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
33120 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
33130 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
33140 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
33150 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
33160 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
33170 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
33180 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
33190 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
331a0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
331b0 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
331c0 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
331d0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
331e0 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
331f0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
33200 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
33210 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
33220 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
33230 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
33240 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
33250 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
33260 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
33270 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
33280 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
33290 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
332a0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
332b0 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
332c0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
332d0 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
332e0 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
332f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
33300 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
33310 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
33320 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
33330 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
33340 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
33350 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
33360 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
33370 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
33380 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
33390 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
333a0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
333b0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
333c0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
333d0 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
333e0 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
333f0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
33400 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
33410 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33420 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
33430 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
33440 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
33450 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
33460 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
33470 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
33480 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
33490 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
334a0 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
334b0 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
334c0 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
334d0 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
334e0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
334f0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33500 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
33510 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
33520 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
33530 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
33540 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
33550 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
33560 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
33570 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
33580 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
33590 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
335a0 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
335b0 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
335c0 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
335d0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
335e0 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
335f0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
33600 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
33610 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
33620 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
33630 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
33640 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
33650 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
33660 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
33670 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
33680 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
33690 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
336a0 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
336b0 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
336c0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
336d0 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
336e0 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
336f0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
33700 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
33710 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
33720 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
33730 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
33740 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
33750 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
33760 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
33770 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
33780 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
33790 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
337a0 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
337b0 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
337c0 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
337d0 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
337e0 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
337f0 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
33800 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
33810 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
33820 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
33830 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
33840 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
33850 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
33860 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
33870 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
33880 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
33890 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
338a0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
338b0 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
338c0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
338d0 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
338e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
338f0 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
33900 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
33910 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
33920 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
33930 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
33940 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
33950 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
33960 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
33970 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
33980 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
33990 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
339a0 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
339b0 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
339c0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
339d0 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
339e0 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
339f0 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
33a00 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
33a10 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
33a20 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
33a30 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
33a40 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
33a50 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
33a60 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
33a70 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
33a80 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
33a90 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
33aa0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
33ab0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
33ac0 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
33ad0 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
33ae0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
33af0 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
33b00 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
33b10 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
33b20 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
33b30 0a 20 20 69 66 28 20 72 63 20 29 20 65 4e 65 77  .  if( rc ) eNew
33b40 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20   = eOld;.  eNew 
33b50 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
33b60 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
33b70 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
33b80 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
33b90 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
33ba0 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
33bb0 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
33bc0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
33bd0 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
33be0 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
33bf0 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
33c00 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
33c10 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
33c20 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
33c30 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
33c40 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20  ncoding);.  if( 
33c50 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
33c60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
33c70 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
33c80 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
33c90 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
33ca0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
33cb0 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
33cc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
33cd0 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
33ce0 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
33cf0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
33d00 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
33d10 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
33d20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
33d30 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
33d40 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
33d50 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
33d60 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
33d70 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
33d80 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
33d90 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
33da0 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
33db0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
33dc0 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
33dd0 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
33de0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
33df0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
33e00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
33e10 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
33e20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
33e30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
33e40 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a  T_AUTOVACUUM)./*
33e50 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63   Opcode: IncrVac
33e60 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  uum P1 P2 * * *.
33e70 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20  **.** Perform a 
33e80 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74  single step of t
33e90 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  he incremental v
33ea0 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20  acuum procedure 
33eb0 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74  on.** the P1 dat
33ec0 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61  abase. If the va
33ed0 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65  cuum has finishe
33ee0 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  d, jump to instr
33ef0 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74  uction.** P2. Ot
33f00 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
33f10 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
33f20 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
33f30 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61  /.case OP_IncrVa
33f40 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  cuum: {        /
33f50 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65  * jump */.  Btre
33f60 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
33f70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
33f80 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
33f90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
33fa0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
33fb0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
33fc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
33fd0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
33fe0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
33ff0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72  Op->p1].pBt;.  r
34000 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
34010 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b  IncrVacuum(pBt);
34020 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
34030 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  en(rc==SQLITE_DO
34040 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  NE,2);.  if( rc 
34050 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  ){.    if( rc!=S
34060 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74  QLITE_DONE ) got
34070 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34080 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53  rror;.    rc = S
34090 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f  QLITE_OK;.    go
340a0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
340b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
340c0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
340d0 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
340e0 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
340f0 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
34100 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e  ments to expire.
34110 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65    When an expire
34120 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69  d statement.** i
34130 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67  s executed using
34140 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
34150 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61  it will either a
34160 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
34170 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66  reprepare itself
34180 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67   (if it was orig
34190 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75  inally created u
341a0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
341b0 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72  pare_v2()).** or
341c0 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69   it will fail wi
341d0 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  th SQLITE_SCHEMA
341e0 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
341f0 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
34200 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
34210 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
34220 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
34230 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
34240 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
34250 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
34260 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61  s expired..*/.ca
34270 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
34280 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
34290 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
342a0 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
342b0 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
342c0 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
342d0 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
342e0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
342f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
34300 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
34310 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
34320 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
34330 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20  ynopsis: iDb=P1 
34340 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33  root=P2 write=P3
34350 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
34360 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
34370 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
34380 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
34390 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
343a0 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
343b0 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
343c0 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
343d0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
343e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
343f0 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
34400 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
34410 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
34420 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
34430 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
34440 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
34450 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
34460 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
34470 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
34480 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
34490 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
344a0 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
344b0 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
344c0 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
344d0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
344e0 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
344f0 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
34500 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
34510 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
34520 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
34530 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
34540 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
34550 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
34560 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
34570 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
34580 5f 4f 4d 49 54 5f 43 4f 4e 43 55 52 52 45 4e 54  _OMIT_CONCURRENT
34590 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f  .  if( isWriteLo
345a0 63 6b 20 26 26 20 64 62 2d 3e 62 43 6f 6e 63 75  ck && db->bConcu
345b0 72 72 65 6e 74 20 26 26 20 70 4f 70 2d 3e 70 32  rrent && pOp->p2
345c0 3d 3d 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==1 ){.    rc = 
345d0 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
345e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
345f0 6f 72 28 70 2c 20 0a 20 20 20 20 20 20 20 20 22  or(p, .        "
34600 63 61 6e 6e 6f 74 20 6d 6f 64 69 66 79 20 64 61  cannot modify da
34610 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 77 69  tabase schema wi
34620 74 68 69 6e 20 43 4f 4e 43 55 52 52 45 4e 54 20  thin CONCURRENT 
34630 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20  transaction");. 
34640 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
34650 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
34660 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 57  #endif.  if( isW
34670 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
34680 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
34690 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
346a0 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
346b0 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
346c0 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
346d0 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
346e0 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
346f0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
34700 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61  sk, p1) );.    a
34710 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
34720 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
34730 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
34740 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
34750 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
34760 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
34770 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
34780 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
34790 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78        if( (rc&0x
347a0 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
347b0 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  ED ){.        co
347c0 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
347d0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20  p->p4.z;.       
347e0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
347f0 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74  r(p, "database t
34800 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20  able is locked: 
34810 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d  %s", z);.      }
34820 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
34830 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
34840 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
34850 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
34860 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
34870 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
34880 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
34890 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
348a0 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
348b0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
348c0 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
348d0 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
348e0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
348f0 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
34900 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
34910 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
34920 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
34930 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
34940 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
34950 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
34960 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
34970 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
34980 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
34990 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
349a0 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
349b0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
349c0 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
349d0 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
349e0 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
349f0 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
34a00 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
34a10 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
34a20 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
34a30 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
34a40 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
34a50 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
34a60 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
34a70 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
34a80 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
34a90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34aa0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
34ab0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
34ac0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34ad0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
34ae0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34af0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
34b00 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32 20  : VCreate P1 P2 
34b10 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69  * * *.**.** P2 i
34b20 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
34b30 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
34b40 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
34b50 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
34b60 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  .** P1. Call the
34b70 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20   xCreate method 
34b80 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
34b90 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
34ba0 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d  te: {.  Mem sMem
34bb0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
34bc0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
34bd0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
34be0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ed */.  const ch
34bf0 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61  ar *zTab;  /* Na
34c00 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  me of the virtua
34c10 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65  l table */..  me
34c20 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
34c30 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
34c40 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20  sMem.db = db;.  
34c50 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69 73  /* Because P2 is
34c60 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69 63   always a static
34c70 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69   string, it is i
34c80 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68  mpossible for th
34c90 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  e.  ** sqlite3Vd
34ca0 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66  beMemCopy() to f
34cb0 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ail */.  assert(
34cc0 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
34cd0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
34ce0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
34cf0 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
34d00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74  flags & MEM_Stat
34d10 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ic)!=0 );.  rc =
34d20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
34d30 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d  opy(&sMem, &aMem
34d40 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73  [pOp->p2]);.  as
34d50 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
34d60 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20  _OK );.  zTab = 
34d70 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
34d80 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
34d90 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74  &sMem);.  assert
34da0 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61  ( zTab || db->ma
34db0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
34dc0 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20  if( zTab ){.    
34dd0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
34de0 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
34df0 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70  Op->p1, zTab, &p
34e00 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
34e10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34e20 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
34e30 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
34e40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34e50 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
34e60 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
34e70 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34e80 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
34e90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34ea0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
34eb0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
34ec0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
34ed0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
34ee0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
34ef0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
34f00 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
34f10 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
34f20 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
34f30 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
34f40 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  {.  db->nVDestro
34f50 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  y++;.  rc = sqli
34f60 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
34f70 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
34f80 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62  pOp->p4.z);.  db
34f90 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20  ->nVDestroy--;. 
34fa0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
34fb0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
34fc0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
34fd0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
34fe0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34ff0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
35000 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35010 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
35020 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
35030 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
35040 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
35050 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
35060 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
35070 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
35080 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
35090 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
350a0 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
350b0 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
350c0 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
350d0 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
350e0 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
350f0 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
35100 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
35110 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
35120 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
35130 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
35140 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
35150 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
35160 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
35170 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
35180 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a   );.  pCur = 0;.
35190 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70    pVCur = 0;.  p
351a0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
351b0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
351c0 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
351d0 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
351e0 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
351f0 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
35200 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  D;.    goto abor
35210 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
35220 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20    }.  pModule = 
35230 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
35240 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
35250 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
35260 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Cur);.  sqlite3V
35270 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
35280 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
35290 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
352a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
352b0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
352c0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
352d0 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
352e0 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62  /.  pVCur->pVtab
352f0 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20   = pVtab;..  /* 
35300 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20  Initialize vdbe 
35310 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
35320 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
35330 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
35340 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54  >p1, 0, -1, CURT
35350 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28  YPE_VTAB);.  if(
35360 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75   pCur ){.    pCu
35370 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56  r->uc.pVCur = pV
35380 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Cur;.    pVtab->
35390 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b  nRef++;.  }else{
353a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
353b0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
353c0 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  .    pModule->xC
353d0 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20  lose(pVCur);.   
353e0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
353f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
35400 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35410 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
35420 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
35430 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
35440 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
35450 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
35460 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
35470 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
35480 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
35490 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
354a0 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
354b0 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
354c0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
354d0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
354e0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
354f0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
35500 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
35510 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
35520 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
35530 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
35540 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
35550 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
35560 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
35570 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
35580 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
35590 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
355a0 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
355b0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
355c0 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
355d0 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
355e0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
355f0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
35600 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
35610 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
35620 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
35630 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
35640 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
35650 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
35660 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
35670 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
35680 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
35690 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
356a0 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
356b0 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
356c0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
356d0 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
356e0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
356f0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
35700 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
35710 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
35720 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
35730 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
35740 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
35750 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
35760 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
35770 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
35780 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
35790 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
357a0 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
357b0 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
357c0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
357d0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
357e0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
357f0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
35800 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
35810 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c  or *pVCur;.  sql
35820 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
35830 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
35840 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
35850 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
35860 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
35870 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
35880 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
35890 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
358a0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
358b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
358c0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
358d0 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
358e0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
358f0 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
35900 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
35910 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
35920 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43   );.  pVCur = pC
35930 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20  ur->uc.pVCur;.  
35940 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70  pVtab = pVCur->p
35950 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
35960 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
35970 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65  ;..  /* Grab the
35980 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e   index number an
35990 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  d argc parameter
359a0 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  s */.  assert( (
359b0 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45  pQuery->flags&ME
359c0 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72  M_Int)!=0 && pAr
359d0 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  gc->flags==MEM_I
359e0 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28  nt );.  nArg = (
359f0 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a  int)pArgc->u.i;.
35a00 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29    iQuery = (int)
35a10 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
35a20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
35a30 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
35a40 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41    res = 0;.  apA
35a50 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
35a60 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
35a70 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70  rg; i++){.    ap
35a80 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
35a90 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  i+1];.  }.  rc =
35aa0 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
35ab0 72 28 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c  r(pVCur, iQuery,
35ac0 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
35ad0 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69  , apArg);.  sqli
35ae0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
35af0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
35b00 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
35b10 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
35b20 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  r;.  res = pModu
35b30 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b  le->xEof(pVCur);
35b40 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
35b50 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
35b60 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
35b70 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
35b80 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
35b90 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
35ba0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
35bb0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
35bc0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
35bd0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
35be0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
35bf0 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
35c00 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
35c10 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32  r[P3]=vcolumn(P2
35c20 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
35c30 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
35c40 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
35c50 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
35c60 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
35c70 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
35c80 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
35c90 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
35ca0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
35cb0 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
35cc0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
35cd0 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
35ce0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
35cf0 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
35d00 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
35d10 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
35d20 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
35d30 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
35d40 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
35d50 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
35d60 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
35d70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
35d80 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
35d90 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
35da0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
35db0 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
35dc0 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
35dd0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
35de0 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
35df0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
35e00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
35e10 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
35e20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
35e30 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63  pVtab = pCur->uc
35e40 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
35e50 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
35e60 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
35e70 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
35e80 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
35e90 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
35ea0 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
35eb0 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
35ec0 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65  ut = pDest;.  Me
35ed0 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
35ee0 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
35ef0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
35f00 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e  Column(pCur->uc.
35f10 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74  pVCur, &sContext
35f20 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
35f30 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
35f40 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
35f50 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
35f60 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
35f70 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
35f80 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
35f90 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
35fa0 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63  oding(pDest, enc
35fb0 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
35fc0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
35fd0 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
35fe0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
35ff0 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
36000 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
36010 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
36020 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
36030 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
36040 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
36050 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
36060 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
36070 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
36080 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
36090 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
360a0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
360b0 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
360c0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
360d0 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
360e0 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
360f0 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
36100 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
36110 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
36120 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
36130 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
36140 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
36150 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
36160 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
36170 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
36180 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
36190 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
361a0 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
361b0 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
361c0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
361d0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
361e0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
361f0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
36200 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
36210 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
36220 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
36230 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
36240 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d   pCur->eCurType=
36250 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
36260 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
36270 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
36280 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
36290 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d   pCur->uc.pVCur-
362a0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
362b0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
362c0 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
362d0 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
362e0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
362f0 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
36300 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
36310 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
36320 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
36330 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
36340 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
36350 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
36360 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
36370 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
36380 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
36390 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
363a0 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
363b0 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
363c0 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
363d0 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
363e0 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
363f0 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
36400 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
36410 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
36420 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
36430 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
36440 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
36450 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
36460 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  ext(pCur->uc.pVC
36470 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  ur);.  sqlite3Vt
36480 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
36490 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
364a0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
364b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
364c0 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
364d0 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  Eof(pCur->uc.pVC
364e0 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ur);.  VdbeBranc
364f0 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a  hTaken(!res,2);.
36500 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
36510 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
36520 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
36530 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75  2 */.    goto ju
36540 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
36550 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
36560 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
36570 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
36580 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
36590 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
365a0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
365b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
365c0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
365d0 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
365e0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
365f0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
36600 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
36610 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
36620 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
36630 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
36640 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
36650 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
36660 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
36670 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
36680 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
36690 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
366a0 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
366b0 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
366c0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
366d0 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
366e0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
366f0 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20    Mem *pName;.. 
36700 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
36710 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
36720 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70   pName = &aMem[p
36730 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
36740 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
36750 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
36760 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
36770 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61  id(pName) );.  a
36780 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
36790 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53  ly==0 );.  REGIS
367a0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
367b0 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
367c0 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
367d0 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
367e0 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
367f0 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
36800 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  F8 );.  testcase
36810 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
36820 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
36830 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
36840 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
36850 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d  TF16LE );.  rc =
36860 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
36870 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65  geEncoding(pName
36880 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
36890 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
368a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
368b0 6f 72 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62  or;.  rc = pVtab
368c0 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
368d0 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
368e0 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  >z);.  sqlite3Vt
368f0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
36900 2c 20 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65  , pVtab);.  p->e
36910 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 69 66  xpired = 0;.  if
36920 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36930 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36940 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36950 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
36960 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36970 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
36980 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
36990 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
369a0 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d  s: data=r[P3@P2]
369b0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
369c0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
369d0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
369e0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
369f0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
36a00 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
36a10 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
36a20 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65  nding xUpdate me
36a30 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a  thod. P2 values.
36a40 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75  ** are contiguou
36a50 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73  s memory cells s
36a60 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f  tarting at P3 to
36a70 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70   pass to the xUp
36a80 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74  date .** invocat
36a90 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69  ion. The value i
36aa0 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50  n register (P3+P
36ab0 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  2-1) corresponds
36ac0 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68   to the .** p2th
36ad0 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
36ae0 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65  argv array passe
36af0 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a  d to xUpdate..**
36b00 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20  .** The xUpdate 
36b10 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61  method will do a
36b20 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e   DELETE or an IN
36b30 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a  SERT or both..**
36b40 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65   The argv[0] ele
36b50 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72  ment (which corr
36b60 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72  esponds to memor
36b70 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73  y cell P3).** is
36b80 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20   the rowid of a 
36b90 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20  row to delete.  
36ba0 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55  If argv[0] is NU
36bb0 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64  LL then no .** d
36bc0 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20  eletion occurs. 
36bd0 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65   The argv[1] ele
36be0 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69  ment is the rowi
36bf0 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a  d of the new .**
36c00 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20   row.  This can 
36c10 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20  be NULL to have 
36c20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
36c30 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77  e select the new
36c40 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69   .** rowid for i
36c50 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73  tself.  The subs
36c60 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20  equent elements 
36c70 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65  in the array are
36c80 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
36c90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
36ca0 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  e new row..**.**
36cb0 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e   If P2==1 then n
36cc0 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66  o insert is perf
36cd0 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20  ormed.  argv[0] 
36ce0 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  is the rowid of.
36cf0 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  ** a row to dele
36d00 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  te..**.** P1 is 
36d10 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  a boolean flag. 
36d20 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  If it is set to 
36d30 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70  true and the xUp
36d40 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20  date call.** is 
36d50 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e  successful, then
36d60 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
36d70 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c  ned by sqlite3_l
36d80 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
36d90 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f  () .** is set to
36da0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
36db0 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20  e rowid for the 
36dc0 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65  row just inserte
36dd0 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74  d..**.** P5 is t
36de0 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73  he error actions
36df0 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45   (OE_Replace, OE
36e00 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65  _Fail, OE_Ignore
36e10 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70  , etc) to.** app
36e20 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ly in the case o
36e30 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  f a constraint f
36e40 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73  ailure on an ins
36e50 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a  ert or update..*
36e60 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
36e70 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
36e80 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
36e90 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
36ea0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
36eb0 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
36ec0 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
36ed0 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
36ee0 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
36ef0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
36f00 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c  ->p2==1        |
36f10 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61  | pOp->p5==OE_Fa
36f20 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  il   || pOp->p5=
36f30 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20  =OE_Rollback .  
36f40 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
36f50 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70  =OE_Abort || pOp
36f60 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
36f70 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
36f80 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73  eplace.  );.  as
36f90 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
36fa0 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20  y==0 );.  pVtab 
36fb0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
36fc0 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56  >pVtab;.  if( pV
36fd0 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28  tab==0 || NEVER(
36fe0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d  pVtab->pModule==
36ff0 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  0) ){.    rc = S
37000 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
37010 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
37020 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
37030 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
37040 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
37050 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
37060 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
37070 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
37080 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
37090 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
370a0 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  .    u8 vtabOnCo
370b0 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61  nflict = db->vta
370c0 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
370d0 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
370e0 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65  g;.    pX = &aMe
370f0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
37100 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
37110 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73   i++){.      ass
37120 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
37130 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  pX) );.      mem
37140 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
37150 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72   pX);.      apAr
37160 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
37170 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
37180 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
37190 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20  ict = pOp->p5;. 
371a0 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
371b0 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
371c0 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
371d0 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74  wid);.    db->vt
371e0 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76  abOnConflict = v
371f0 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
37200 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
37210 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
37220 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
37230 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
37240 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20  Op->p1 ){.      
37250 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26  assert( nArg>1 &
37260 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61  & apArg[0] && (a
37270 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d  pArg[0]->flags&M
37280 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20  EM_Null) );.    
37290 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
372a0 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f  = lastRowid = ro
372b0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  wid;.    }.    i
372c0 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
372d0 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
372e0 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62  && pOp->p4.pVtab
372f0 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b  ->bConstraint ){
37300 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
37310 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p5==OE_Ignore ){
37320 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
37330 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d  LITE_OK;.      }
37340 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
37350 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
37360 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70  (pOp->p5==OE_Rep
37370 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74  lace) ? OE_Abort
37380 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20   : pOp->p5);.   
37390 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
373a0 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65        p->nChange
373b0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
373c0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
373d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
373e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
373f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37400 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37410 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
37420 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
37430 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
37440 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
37450 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
37460 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
37470 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
37480 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
37490 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
374a0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
374b0 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
374c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
374d0 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
374e0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
374f0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
37500 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
37510 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f  tPage(db->aDb[pO
37520 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62  p->p1].pBt);.  b
37530 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
37540 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
37550 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
37560 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  MAS./* Opcode: M
37570 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33  axPgcnt P1 P2 P3
37580 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74   * *.**.** Try t
37590 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75  o set the maximu
375a0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72  m page count for
375b0 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
375c0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e  the value in P3.
375d0 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74  .** Do not let t
375e0 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
375f0 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77  count fall below
37600 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67   the current pag
37610 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64  e count and.** d
37620 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65  o not change the
37630 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
37640 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d  unt value if P3=
37650 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  =0..**.** Store 
37660 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
37670 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65   count after the
37680 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73   change in regis
37690 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
376a0 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20  OP_MaxPgcnt: {  
376b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
376c0 32 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  2 */.  unsigned 
376d0 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74  int newMax;.  Bt
376e0 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75  ree *pBt;..  pOu
376f0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
37700 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42  se(p, pOp);.  pB
37710 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
37720 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d  >p1].pBt;.  newM
37730 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ax = 0;.  if( pO
37740 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77  p->p3 ){.    new
37750 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Max = sqlite3Btr
37760 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b  eeLastPage(pBt);
37770 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20  .    if( newMax 
37780 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  < (unsigned)pOp-
37790 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28  >p3 ) newMax = (
377a0 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33  unsigned)pOp->p3
377b0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
377c0 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
377d0 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74  MaxPageCount(pBt
377e0 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65  , newMax);.  bre
377f0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ak;.}.#endif.../
37800 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 2a  * Opcode: Init *
37810 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
37820 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20 61  nopsis:  Start a
37830 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72  t P2.**.** Progr
37840 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  ams contain a si
37850 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66  ngle instance of
37860 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20   this opcode as 
37870 74 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a  the very first.*
37880 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  * opcode..**.** 
37890 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
378a0 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
378b0 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
378c0 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
378d0 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
378e0 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
378f0 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
37900 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
37910 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34  ack..** Or if P4
37920 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74   is blank, use t
37930 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  he string return
37940 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71  ed by sqlite3_sq
37950 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  l()..**.** If P2
37960 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75   is not zero, ju
37970 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
37980 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
37990 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20  _Init: {        
379a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63    /* jump */.  c
379b0 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 63  har *zTrace;.  c
379c0 68 61 72 20 2a 7a 3b 0a 0a 23 69 66 6e 64 65 66  har *z;..#ifndef
379d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
379e0 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72  CE.  if( db->xTr
379f0 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f  ace.   && !p->do
37a00 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28  ingRerun.   && (
37a10 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
37a20 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
37a30 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
37a40 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69   ){.    z = sqli
37a50 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
37a60 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
37a70 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
37a80 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20  pTraceArg, z);. 
37a90 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
37aa0 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66  (db, z);.  }.#if
37ab0 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46  def SQLITE_USE_F
37ac0 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72  CNTL_TRACE.  zTr
37ad0 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
37ae0 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
37af0 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
37b00 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74  Trace ){.    int
37b10 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
37b20 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
37b30 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61  {.      if( DbMa
37b40 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
37b50 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e  ask, i)==0 ) con
37b60 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
37b70 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
37b80 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  l(db, db->aDb[i]
37b90 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  .zName, SQLITE_F
37ba0 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61  CNTL_TRACE, zTra
37bb0 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ce);.    }.  }.#
37bc0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37bd0 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20  USE_FCNTL_TRACE 
37be0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
37bf0 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
37c00 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
37c10 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
37c20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
37c30 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
37c40 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
37c50 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
37c60 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
37c70 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
37c80 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
37c90 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
37ca0 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
37cb0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
37cc0 54 52 41 43 45 20 2a 2f 0a 20 20 69 66 28 20 70  TRACE */.  if( p
37cd0 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
37ce0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
37cf0 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  k;.}..#ifdef SQL
37d00 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
37d10 52 5f 48 49 4e 54 53 0a 2f 2a 20 4f 70 63 6f 64  R_HINTS./* Opcod
37d20 65 3a 20 43 75 72 73 6f 72 48 69 6e 74 20 50 31  e: CursorHint P1
37d30 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
37d40 50 72 6f 76 69 64 65 20 61 20 68 69 6e 74 20 74  Provide a hint t
37d50 6f 20 63 75 72 73 6f 72 20 50 31 20 74 68 61 74  o cursor P1 that
37d60 20 69 74 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74   it only needs t
37d70 6f 20 72 65 74 75 72 6e 20 72 6f 77 73 20 74 68  o return rows th
37d80 61 74 0a 2a 2a 20 73 61 74 69 73 66 79 20 74 68  at.** satisfy th
37d90 65 20 45 78 70 72 20 69 6e 20 50 34 2e 20 20 54  e Expr in P4.  T
37da0 4b 5f 52 45 47 49 53 54 45 52 20 74 65 72 6d 73  K_REGISTER terms
37db0 20 69 6e 20 74 68 65 20 50 34 20 65 78 70 72 65   in the P4 expre
37dc0 73 73 69 6f 6e 20 72 65 66 65 72 0a 2a 2a 20 74  ssion refer.** t
37dd0 6f 20 76 61 6c 75 65 73 20 63 75 72 72 65 6e 74  o values current
37de0 6c 79 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ly held in regis
37df0 74 65 72 73 2e 20 20 54 4b 5f 43 4f 4c 55 4d 4e  ters.  TK_COLUMN
37e00 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 50 34   terms in the P4
37e10 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 72  .** expression r
37e20 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d 6e 73 20  efer to columns 
37e30 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 74 6f  in the b-tree to
37e40 20 77 68 69 63 68 20 63 75 72 73 6f 72 20 50 31   which cursor P1
37e50 20 69 73 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2f   is pointing..*/
37e60 0a 63 61 73 65 20 4f 50 5f 43 75 72 73 6f 72 48  .case OP_CursorH
37e70 69 6e 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  int: {.  VdbeCur
37e80 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
37e90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
37ea0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
37eb0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
37ec0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
37ed0 34 5f 45 58 50 52 20 29 3b 0a 20 20 70 43 20 3d  4_EXPR );.  pC =
37ee0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
37ef0 31 5d 3b 0a 20 20 69 66 28 20 70 43 20 29 7b 0a  1];.  if( pC ){.
37f00 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
37f10 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
37f20 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 73  E_BTREE );.    s
37f30 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
37f40 72 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  rHint(pC->uc.pCu
37f50 72 73 6f 72 2c 20 42 54 52 45 45 5f 48 49 4e 54  rsor, BTREE_HINT
37f60 5f 52 41 4e 47 45 2c 0a 20 20 20 20 20 20 20 20  _RANGE,.        
37f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f80 20 20 20 70 4f 70 2d 3e 70 34 2e 70 45 78 70 72     pOp->p4.pExpr
37f90 2c 20 61 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 62  , aMem);.  }.  b
37fa0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
37fb0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
37fc0 43 55 52 53 4f 52 5f 48 49 4e 54 53 20 2a 2f 0a  CURSOR_HINTS */.
37fd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
37fe0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
37ff0 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
38000 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
38010 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
38020 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
38030 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
38040 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
38050 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
38060 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
38070 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
38080 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
38090 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
380a0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
380b0 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
380c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
380d0 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
380e0 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
380f0 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
38100 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
38110 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
38120 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
38130 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
38140 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
38150 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
38160 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
38170 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
38180 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73  _Explain */.  as
38190 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
381a0 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f  e==OP_Noop || pO
381b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  p->opcode==OP_Ex
381c0 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b  plain );.  break
381d0 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
381e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
381f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
38200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
38210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
38220 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73  ***.** The cases
38230 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73   of the switch s
38240 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74  tatement above t
38250 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
38260 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a  all be indented.
38270 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ** by 6 spaces. 
38280 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f   But the left-mo
38290 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65  st 6 spaces