/ Hex Artifact Content
Login

Artifact 839999e07f6eaa35d1561ffd9055999938d17f82dc4e0fc52564c21eee385b0f:


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 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43  ;.    }.    *(zC
3740: 73 72 2b 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73  sr++) = c;.    s
3750: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3760: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22  100, zCsr, "%d["
3770: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
3780: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3790: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
37a0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
37b0: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
37c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
37d0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
37e0: 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28   zCsr, "%02X", (
37f0: 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20  (int)pMem->z[i] 
3800: 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20  & 0xFF));.      
3810: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3820: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3830: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30     }.    for(i=0
3840: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
3850: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
3860: 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e   char z = pMem->
3870: 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[i];.      if( 
3880: 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20  z<32 || z>126 ) 
3890: 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20  *zCsr++ = '.';. 
38a0: 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b       else *zCsr+
38b0: 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  + = z;.    }.   
38c0: 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27   *(zCsr++) = ']'
38d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
38e0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
38f0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3900: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3910: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3920: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3930: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3940: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3950: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3960: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3970: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3980: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3990: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
39a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
39b0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
39c0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
39d0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
39e0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
39f0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3a00: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3a10: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3a20: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3a30: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3a40: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3a50: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3a60: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3a70: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3a80: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3a90: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3aa0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3ab0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
3ac0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3ad0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
3ae0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
3af0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3b00: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3b10: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3b20: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3b30: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3b40: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3b50: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3b60: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3b70: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3b80: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
3b90: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
3ba0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
3bb0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
3bc0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
3bd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
3be0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3bf0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3c00: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3c10: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3c20: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3c30: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3c40: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3c50: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3c60: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3c70: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3c80: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
3c90: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3ca0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3cb0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
3cc0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
3cd0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
3ce0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
3cf0: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3d00: 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  nt(Mem *p){.  if
3d10: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3d20: 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20  _Undefined ){.  
3d30: 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66    printf(" undef
3d40: 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20  ined");.  }else 
3d50: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3d60: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
3d70: 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a  rintf(" NULL");.
3d80: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e    }else if( (p->
3d90: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
3da0: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d  |MEM_Str))==(MEM
3db0: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b  _Int|MEM_Str) ){
3dc0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69  .    printf(" si
3dd0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3de0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3df0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
3e00: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3e10: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e20: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
3e30: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e40: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
3e50: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3e60: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Real ){.    prin
3e70: 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75  tf(" r:%g", p->u
3e80: 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  .r);.#endif.  }e
3e90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ea0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b   & MEM_RowSet ){
3eb0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
3ec0: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
3ed0: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
3ee0: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
3ef0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3f00: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
3f10: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
3f20: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66   zBuf);.  }.  if
3f30: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3f40: 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74  _Subtype ) print
3f50: 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30  f(" subtype=0x%0
3f60: 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65  2x", p->eSubtype
3f70: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
3f80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3f90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3fa0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3fb0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3fc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3fd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3fe0: 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ");.}.#endif..#i
3ff0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4000: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
4010: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
4020: 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  if(db->flags&SQL
4030: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65  ITE_VdbeTrace)re
4040: 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29  gisterTrace(R,M)
4050: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
4060: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
4070: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
4080: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4090: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
40a0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
40b0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
40c0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
40d0: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
40e0: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
40f0: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
4100: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
4110: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
4120: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
4130: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
4140: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
4150: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
4160: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
4170: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
4180: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
4190: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
41a0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
41b0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
41c0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
41d0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
41e0: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
41f0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
4200: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
4210: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
4220: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
4230: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
4240: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
4250: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
4260: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
4270: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
4280: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4290: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
42a0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
42b0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
42c0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
42d0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
42e0: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
42f0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4300: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4310: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4320: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4330: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 67  * Return the reg
4340: 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70 32  ister of pOp->p2
4350: 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72 65   after first pre
4360: 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65 0a  paring it to be.
4370: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  ** overwritten w
4380: 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ith an integer v
4390: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
43a0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
43b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
43c0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65 6d  aseWithClear(Mem
43d0: 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69 74   *pOut){.  sqlit
43e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
43f0: 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  (pOut);.  pOut->
4400: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4410: 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a  .  return pOut;.
4420: 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f 75  }.static Mem *ou
4430: 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64 62  t2Prerelease(Vdb
4440: 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70 4f  e *p, VdbeOp *pO
4450: 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b  p){.  Mem *pOut;
4460: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
4470: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
4480: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
4490: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
44a0: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
44b0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
44c0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
44d0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
44e0: 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
44f0: 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f 2a  amic(pOut) ){ /*
4500: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
4510: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74 75  FALSE*/.    retu
4520: 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73  rn out2Prereleas
4530: 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74 29  eWithClear(pOut)
4540: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
4550: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
4560: 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72 6e  _Int;.    return
4570: 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f   pOut;.  }.}.../
4580: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20  *.** Execute as 
4590: 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70  much of a VDBE p
45a0: 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e  rogram as we can
45b0: 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  ..** This is the
45c0: 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65 33   core of sqlite3
45d0: 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e  _step().  .*/.in
45e0: 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  t sqlite3VdbeExe
45f0: 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20  c(.  Vdbe *p    
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4610: 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29  /* The VDBE */.)
4620: 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  {.  Op *aOp = p-
4630: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
4640: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
4650: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20   */.  Op *pOp = 
4660: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  aOp;            
4670: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
4680: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66  ation */.#if def
4690: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
46a0: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44  G) || defined(VD
46b0: 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70  BE_PROFILE).  Op
46c0: 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20 20   *pOrigOp;      
46d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
46e0: 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65 20  e of pOp at the 
46f0: 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  top of the loop 
4700: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
4710: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4720: 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74 65  int nExtraDelete
4730: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56 65   = 0;      /* Ve
4740: 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54 45  rifies FORDELETE
4750: 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20 66   and AUXDELETE f
4760: 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lags */.#endif. 
4770: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
4780: 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56  _OK;        /* V
4790: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a  alue to return *
47a0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  /.  sqlite3 *db 
47b0: 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f  = p->db;       /
47c0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a  * The database *
47d0: 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68 65  /.  u8 resetSche
47e0: 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f  maOnFault = 0; /
47f0: 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20 61  * Reset schema a
4800: 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69 66  fter an error if
4810: 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 75   positive */.  u
4820: 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43  8 encoding = ENC
4830: 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  (db);     /* The
4840: 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
4850: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d  ng */.  int iCom
4860: 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20  pare = 0;       
4870: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
4880: 6c 61 73 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20  last comparison 
4890: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56  */.  unsigned nV
48a0: 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20  mStep = 0;      
48b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
48c0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65  tual machine ste
48d0: 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ps */.#ifndef SQ
48e0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
48f0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e  SS_CALLBACK.  un
4900: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
4910: 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76  Limit = 0;/* Inv
4920: 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29 20  oke xProgress() 
4930: 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61  when nVmStep rea
4940: 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e  ches this */.#en
4950: 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20  dif.  Mem *aMem 
4960: 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20  = p->aMem;      
4970: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4980: 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  Mem */.  Mem *pI
4990: 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n1 = 0;         
49a0: 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74      /* 1st input
49b0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
49c0: 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20  m *pIn2 = 0;    
49d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20           /* 2nd 
49e0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
49f0: 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30  .  Mem *pIn3 = 0
4a00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4a10: 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61   3rd input opera
4a20: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  nd */.  Mem *pOu
4a30: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  t = 0;          
4a40: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4a50: 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66 20 56  rand */.#ifdef V
4a60: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
4a70: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
4a80: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4a90: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4aa0: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4ab0: 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20  /.#endif.  /*** 
4ac0: 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49  INSERT STACK UNI
4ad0: 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20  ON HERE ***/..  
4ae0: 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63  assert( p->magic
4af0: 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
4b00: 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f   );  /* sqlite3_
4b10: 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20  step() verifies 
4b20: 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  this */.  sqlite
4b30: 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20  3VdbeEnter(p);. 
4b40: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
4b50: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
4b60: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
4b70: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
4b80: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
4b90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4ba0: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
4bb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4bc0: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
4bd0: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
4be0: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
4bf0: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4c00: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
4c10: 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  f)==SQLITE_BUSY 
4c20: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
4c30: 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e  bIsReader || p->
4c40: 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20  readOnly!=0 );. 
4c50: 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65   p->iCurrentTime
4c60: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
4c70: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4c80: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4c90: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4ca0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4cb0: 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  0;.  if( db->u1.
4cc0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
4cd0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
4ce0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73  o_interrupt;.  s
4cf0: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4d00: 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66  eSql(p);.#ifndef
4d10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4d20: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4d30: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
4d40: 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20 69 50  ss ){.    u32 iP
4d50: 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74  rior = p->aCount
4d60: 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
4d70: 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20  ATUS_VM_STEP];. 
4d80: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
4d90: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
4da0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
4db0: 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f  Limit = db->nPro
4dc0: 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50 72 69  gressOps - (iPri
4dd0: 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65  or % db->nProgre
4de0: 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65 6e 64  ssOps);.  }.#end
4df0: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4e00: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4e10: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4e20: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4e30: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
4e40: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
4e50: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
4e60: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
4e70: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
4e80: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
4e90: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
4ea0: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
4eb0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4ec0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4ed0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4ee0: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
4ef0: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4f00: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
4f10: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
4f20: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
4f30: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
4f40: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4f50: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
4f60: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
4f70: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
4f80: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4f90: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
4fa0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
4fb0: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
4fc0: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
4fd0: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
4fe0: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
4ff0: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
5000: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
5010: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
5020: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
5030: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
5040: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
5050: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
5060: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5070: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5080: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5090: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
50a0: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
50b0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
50c0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
50d0: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
50e0: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
50f0: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
5100: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
5110: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
5120: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
5130: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
5140: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
5150: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
5160: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
5170: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
5180: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5190: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
51a0: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
51b0: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
51c0: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
51d0: 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e  te3Hwtime();.#en
51e0: 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b  dif.    nVmStep+
51f0: 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
5200: 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
5210: 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20  NSTATUS.    if( 
5220: 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61  p->anExec ) p->a
5230: 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d  nExec[(int)(pOp-
5240: 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a  aOp)]++;.#endif.
5250: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
5260: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
5270: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
5280: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
5290: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
52a0: 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
52b0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
52c0: 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
52d0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
52e0: 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29  Op(stdout, (int)
52f0: 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70  (pOp - aOp), pOp
5300: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
5310: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
5320: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
5330: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
5340: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
5350: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
5360: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
5370: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
5380: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
5390: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
53a0: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
53b0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
53c0: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
53d0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
53e0: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
53f0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
5400: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
5410: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
5420: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
5430: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5440: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
5450: 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20  Sanity checking 
5460: 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64  on other operand
5470: 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
5480: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 0a 20  TE_DEBUG.    {. 
5490: 20 20 20 20 20 75 38 20 6f 70 50 72 6f 70 65 72       u8 opProper
54a0: 74 79 20 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f  ty = sqlite3Opco
54b0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
54c0: 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69  opcode];.      i
54d0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
54e0: 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29   OPFLG_IN1)!=0 )
54f0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5500: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5510: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5520: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
5530: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
5540: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5550: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5560: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
5570: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5580: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5590: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
55a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
55b0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
55c0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
55d0: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
55e0: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
55f0: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5600: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  y & OPFLG_IN2)!=
5610: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
5620: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5630: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5640: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
5650: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
5660: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
5670: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5680: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5690: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
56a0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
56b0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
56c0: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
56d0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
56e0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
56f0: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5700: 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
5710: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5720: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33  erty & OPFLG_IN3
5730: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5740: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5750: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5760: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
5770: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5780: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5790: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
57a0: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
57b0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p3]) );.        
57c0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
57d0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
57e0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
57f0: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p3]) );.       
5800: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5810: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5820: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
5830: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5840: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5850: 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT2)!=0 ){.    
5860: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5870: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p2>0 );.       
5880: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5890: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
58a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
58b0: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
58c0: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
58d0: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
58e0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
58f0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5900: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5910: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5920: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5930: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5940: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
5950: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5960: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
5970: 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
5980: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5990: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
59a0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
59b0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
59c0: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
59d0: 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20  LE).    pOrigOp 
59e0: 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20  = pOp;.#endif.  
59f0: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5a00: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5a10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5a60: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5a70: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5a80: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5a90: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5aa0: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5ab0: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5ac0: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5ad0: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5ae0: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5af0: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5b00: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5b10: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5b20: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5b30: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5b40: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5b50: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5b60: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5b70: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5b80: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5b90: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5ba0: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5bb0: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5bc0: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5bd0: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5be0: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5bf0: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5c00: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5c10: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5c20: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5c30: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5c40: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5c50: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5c60: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5c70: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5c80: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5c90: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5ca0: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5cb0: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5cc0: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5cd0: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5ce0: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5cf0: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5d00: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5d10: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5d20: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5d30: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5d40: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5d50: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5d60: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5d70: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5d80: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5d90: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5da0: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5db0: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5dc0: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5dd0: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5de0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5df0: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5e00: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5e10: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5e20: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5e30: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5e40: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5e50: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5e60: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5e70: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5e80: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5e90: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5ea0: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5eb0: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5ec0: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5ed0: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5ee0: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5ef0: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5f00: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5f10: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5f20: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5f30: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5f40: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20  in2, in3, out2, 
5f50: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5f60: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5f70: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5f80: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5f90: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5fa0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5fb0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5fc0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5fd0: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5fe0: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5ff0: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
6000: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
6010: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
6020: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
6030: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
6040: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
6050: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
6060: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
6070: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
6080: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6090: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
60a0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
60b0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
60c0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
60d0: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
60e0: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
60f0: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
6100: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6160: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6170: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
6180: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6190: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
61a0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
61b0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
61c0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
61d0: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
61e0: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
61f0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6200: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  the program..**.
6210: 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65  ** The P1 parame
6220: 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ter is not actua
6230: 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73  lly used by this
6240: 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65   opcode.  Howeve
6250: 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65  r, it.** is some
6260: 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69  times set to 1 i
6270: 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61  nstead of 0 as a
6280: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
6290: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a  mand-line shell.
62a0: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74  ** that this Got
62b0: 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  o is the bottom 
62c0: 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68  of a loop and th
62d0: 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f  at the lines fro
62e0: 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20  m P2 down.** to 
62f0: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65  the current line
6300: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
6310: 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ted for EXPLAIN 
6320: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
6330: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
6340: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6350: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  /.jump_to_p2_and
6360: 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
6370: 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61  rupt:.  pOp = &a
6380: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
6390: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
63a0: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
63b0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
63c0: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
63d0: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
63e0: 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74  VNext, OP_RowSet
63f0: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
6400: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
6410: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
6420: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
6430: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
6440: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
6450: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
6460: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
6470: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6480: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
6490: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
64a0: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
64b0: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
64c0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
64d0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
64e0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
64f0: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
6500: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
6510: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
6520: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
6530: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
6540: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
6550: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
6560: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
6570: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
6580: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
6590: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
65a0: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
65b0: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
65c0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
65d0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
65e0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
65f0: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
6600: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
6610: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
6620: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
6630: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
6640: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
6650: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
6660: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
6670: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
6680: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
6690: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
66a0: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
66b0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
66c0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
66d0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
66e0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
66f0: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
6700: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
6710: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
6720: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
6730: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
6740: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
6750: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
6760: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6770: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
6780: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
6790: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
67a0: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
67b0: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
67c0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
67d0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
67e0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
67f0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20  ogressLimit ){. 
6800: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
6810: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
6820: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
6830: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6840: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6850: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
6860: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
6870: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
6880: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
6890: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
68a0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
68b0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
68c0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
68d0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
68e0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65  .#endif.  .  bre
68f0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6900: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6910: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
6920: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
6930: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
6940: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
6950: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
6960: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
6970: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
6980: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6990: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
69a0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
69b0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
69c0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
69d0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
69e0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
69f0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
6a00: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
6a10: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
6a20: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
6a30: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6a40: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
6a50: 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20  nt)(pOp-aOp);.  
6a60: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6a70: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a  Op->p1, pIn1);..
6a80: 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f    /* Most jump o
6a90: 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67  perations do a g
6aa0: 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74  oto to this spot
6ab0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
6ac0: 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70  ate.  ** the pOp
6ad0: 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d   pointer. */.jum
6ae0: 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d  p_to_p2:.  pOp =
6af0: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
6b00: 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1];.  break;.}..
6b10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75  /* Opcode:  Retu
6b20: 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  rn P1 * * * *.**
6b30: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
6b40: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
6b50: 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65   after the addre
6b60: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
6b70: 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65  1.  After.** the
6b80: 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20   jump, register 
6b90: 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66  P1 becomes undef
6ba0: 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
6bb0: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
6bc0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6bd0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6be0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6bf0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
6c00: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20  EM_Int );.  pOp 
6c10: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
6c20: 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ];.  pIn1->flags
6c30: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
6c40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6c50: 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72   Opcode: InitCor
6c60: 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20  outine P1 P2 P3 
6c70: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70  * *.**.** Set up
6c80: 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20   register P1 so 
6c90: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65  that it will Yie
6ca0: 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74  ld to the corout
6cb0: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
6cc0: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
6cd0: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
6ce0: 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  n the coroutine 
6cf0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
6d00: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
6d10: 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  ws.** this opcod
6d20: 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72  e.  So jump over
6d30: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
6d40: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
6d50: 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a  .** address P2..
6d60: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
6d70: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  EndCoroutine.*/.
6d80: 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f  case OP_InitCoro
6d90: 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20  utine: {     /* 
6da0: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
6db0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20  ( pOp->p1>0 &&  
6dc0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
6dd0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
6de0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
6df0: 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70  Op->p2>=0 && pOp
6e00: 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
6e10: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
6e20: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
6e30: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20  ->nOp );.  pOut 
6e40: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6e50: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62  ;.  assert( !Vdb
6e60: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
6e70: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ) );.  pOut->u.i
6e80: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
6e90: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
6ea0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70  MEM_Int;.  if( p
6eb0: 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
6ec0: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
6ed0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6ee0: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
6ef0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6f00: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
6f10: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
6f20: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
6f30: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
6f40: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
6f50: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
6f60: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
6f70: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6f80: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6f90: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
6fa0: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6fb0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6fc0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
6fd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6fe0: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
6ff0: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
7000: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7010: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7020: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
7030: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7040: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
7050: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
7060: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
7070: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
7080: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
7090: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
70a0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
70b0: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
70c0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
70d0: 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  Op );.  pOp = &a
70e0: 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d  Op[pCaller->p2 -
70f0: 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61   1];.  pIn1->fla
7100: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
7110: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
7120: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
7130: 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
7140: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
7150: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
7160: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
7170: 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68 69  egister P1.  Thi
7180: 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66  s.** has the eff
7190: 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20  ect of yielding 
71a0: 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a  to a coroutine..
71b0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72  **.** If the cor
71c0: 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c  outine that is l
71d0: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
71e0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
71f0: 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f   with.** Yield o
7200: 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  r Return then co
7210: 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65  ntinue to the ne
7220: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
7230: 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63   But if.** the c
7240: 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65  oroutine launche
7250: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
7260: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
7270: 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c  ** EndCoroutine,
7280: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
7290: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e   rather than con
72a0: 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65  tinuing with the
72b0: 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63  .** next instruc
72c0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
72d0: 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74  also: InitCorout
72e0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  ine.*/.case OP_Y
72f0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
7300: 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20     /* in1, jump 
7310: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
7320: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7330: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7340: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
7350: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
7360: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7370: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
7380: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
7390: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
73a0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
73b0: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
73c0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
73d0: 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  1);.  pOp = &aOp
73e0: 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61  [pcDest];.  brea
73f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7400: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
7410: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
7420: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
7430: 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a  3]=null halt.**.
7440: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
7450: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7460: 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c  3.  If it is NUL
7470: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
7480: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
7490: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
74a0: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
74b0: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
74c0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
74d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
74e0: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
74f0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
7500: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20   is a no-op..** 
7510: 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
7520: 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f   should be 1..*/
7530: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
7540: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
7550: 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
7560: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
7570: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
7580: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
7590: 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
75a0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
75b0: 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f   OP_Halt */.}../
75c0: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20  * Opcode:  Halt 
75d0: 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
75e0: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
75f0: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
7600: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
7610: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
7620: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
7630: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
7640: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
7650: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
7660: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
7670: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
7680: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
7690: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
76a0: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
76b0: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
76c0: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
76d0: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
76e0: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
76f0: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
7700: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
7710: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
7720: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
7730: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
7740: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
7750: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
7760: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
7770: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
7780: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
7790: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
77a0: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
77b0: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
77c0: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
77d0: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
77e0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
77f0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
7800: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
7810: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
7820: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
7830: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
7840: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
7850: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20  ng..**.** P5 is 
7860: 61 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20  a value between 
7870: 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69  0 and 4, inclusi
7880: 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65  ve, that modifie
7890: 73 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  s the P4 string.
78a0: 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e  .**.**    0:  (n
78b0: 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20  o change).**    
78c0: 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  1:  NOT NULL con
78d0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
78e0: 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51  4.**    2:  UNIQ
78f0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
7900: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33  iled: P4.**    3
7910: 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  :  CHECK constra
7920: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7930: 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e  *    4:  FOREIGN
7940: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
7950: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a  failed: P4.**.**
7960: 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
7970: 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c  ro and P4 is NUL
7980: 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68 69  L, then everythi
7990: 6e 67 20 61 66 74 65 72 20 74 68 65 20 22 3a 22  ng after the ":"
79a0: 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a   is.** omitted..
79b0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61  **.** There is a
79c0: 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20  n implied "Halt 
79d0: 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69  0 0 0" instructi
79e0: 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  on inserted at t
79f0: 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a  he very end of.*
7a00: 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e  * every program.
7a10: 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74    So a jump past
7a20: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75   the last instru
7a30: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  ction of the pro
7a40: 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73  gram.** is the s
7a50: 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67  ame as executing
7a60: 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Halt..*/.case O
7a70: 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65  P_Halt: {.  Vdbe
7a80: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
7a90: 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78   int pcx;..  pcx
7aa0: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
7ab0: 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Op);.  if( pOp->
7ac0: 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  p1==SQLITE_OK &&
7ad0: 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
7ae0: 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75    /* Halt the su
7af0: 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72  b-program. Retur
7b00: 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  n control to the
7b10: 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a   parent frame. *
7b20: 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  /.    pFrame = p
7b30: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7b40: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7b50: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7b60: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7b70: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7b80: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7b90: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d  ange);.    pcx =
7ba0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
7bb0: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
7bc0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7bd0: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
7be0: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
7bf0: 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20  tion pcx is the 
7c00: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
7c10: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
7c20: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
7c30: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
7c40: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
7c50: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
7c60: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
7c70: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
7c80: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
7c90: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
7ca0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
7cb0: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
7cc0: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
7cd0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
7ce0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
7cf0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
7d00: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
7d10: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
7d20: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
7d30: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20  .  */.      pcx 
7d40: 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32  = p->aOp[pcx].p2
7d50: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
7d60: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
7d70: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
7d80: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
7d90: 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  cx];.    break;.
7da0: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
7db0: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
7dc0: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
7dd0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
7de0: 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20   pcx;.  assert( 
7df0: 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20  pOp->p5<=4 );.  
7e00: 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20  if( p->rc ){.   
7e10: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
7e20: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
7e30: 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20  st char * const 
7e40: 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f  azType[] = { "NO
7e50: 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45  T NULL", "UNIQUE
7e60: 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20  ", "CHECK",.    
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e90: 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47           "FOREIG
7ea0: 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20  N KEY" };.      
7eb0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7ec0: 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  5==1 );.      te
7ed0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7ee0: 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =2 );.      test
7ef0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33  case( pOp->p5==3
7f00: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7f10: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29  se( pOp->p5==4 )
7f20: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
7f30: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20  dbeError(p, "%s 
7f40: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7f50: 64 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e  d", azType[pOp->
7f60: 70 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66  p5-1]);.      if
7f70: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
7f80: 20 20 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73         p->zErrMs
7f90: 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  g = sqlite3MPrin
7fa0: 74 66 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c  tf(db, "%z: %s",
7fb0: 20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70   p->zErrMsg, pOp
7fc0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d  ->p4.z);.      }
7fd0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7fe0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
7ff0: 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d  or(p, "%s", pOp-
8000: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
8010: 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f    sqlite3_log(pO
8020: 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74  p->p1, "abort at
8030: 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22   %d in [%s]: %s"
8040: 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20  , pcx, p->zSql, 
8050: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
8060: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
8070: 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73  dbeHalt(p);.  as
8080: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8090: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
80a0: 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
80b0: 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20  LITE_ERROR );.  
80c0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
80d0: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
80e0: 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
80f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
8100: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8110: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
8120: 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
8130: 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73  RAINT );.    ass
8140: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8150: 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  OK || db->nDefer
8160: 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d  redCons>0 || db-
8170: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
8180: 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  s>0 );.    rc = 
8190: 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45  p->rc ? SQLITE_E
81a0: 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f  RROR : SQLITE_DO
81b0: 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  NE;.  }.  goto v
81c0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
81d0: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65  * Opcode: Intege
81e0: 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
81f0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8200: 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  =P1.**.** The 32
8210: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
8220: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
8230: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8240: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
8250: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
8260: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f   /* out2 */.  pO
8270: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8280: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8290: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
82a0: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
82b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
82c0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
82d0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
82e0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
82f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
8300: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
8310: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
8320: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
8330: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
8340: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
8350: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8360: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8370: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8380: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
8390: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
83a0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
83b0: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
83c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
83d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
83e0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
83f0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
8400: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8410: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
8420: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
8430: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
8440: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
8450: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8460: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8470: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8480: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
8490: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
84a0: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
84b0: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
84c0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
84d0: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
84e0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
84f0: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
8500: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
8510: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
8520: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70  pOut->u.r = *pOp
8530: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
8540: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
8550: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
8560: 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  8 * P2 * P4 *.**
8570: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8580: 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70  ='P4'.**.** P4 p
8590: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
85a0: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
85b0: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
85c0: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
85d0: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74  ed .** into a St
85e0: 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f  ring opcode befo
85f0: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
8600: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
8610: 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a  time.  During.**
8620: 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61   this transforma
8630: 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68  tion, the length
8640: 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69 73   of string P4 is
8650: 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74   computed and st
8660: 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50  ored.** as the P
8670: 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a  1 parameter..*/.
8680: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a  case OP_String8:
8690: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61   {         /* sa
86a0: 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c  me as TK_STRING,
86b0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
86c0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
86d0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
86e0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
86f0: 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  p);.  pOp->opcod
8700: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
8710: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74   pOp->p1 = sqlit
8720: 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e  e3Strlen30(pOp->
8730: 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  p4.z);..#ifndef 
8740: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
8750: 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67  6.  if( encoding
8760: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
8770: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
8780: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
8790: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
87a0: 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
87b0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
87c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
87d0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
87e0: 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  ==SQLITE_TOOBIG 
87f0: 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
8800: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
8810: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
8820: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
8830: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
8840: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d     assert( pOut-
8850: 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70  >szMalloc>0 && p
8860: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f  Out->zMalloc==pO
8870: 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73  ut->z );.    ass
8880: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
8890: 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a  mic(pOut)==0 );.
88a0: 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c      pOut->szMall
88b0: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74  oc = 0;.    pOut
88c0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53  ->flags |= MEM_S
88d0: 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70  tatic;.    if( p
88e0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44  Op->p4type==P4_D
88f0: 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20  YNAMIC ){.      
8900: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
8910: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
8920: 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74    }.    pOp->p4t
8930: 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43  ype = P4_DYNAMIC
8940: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20  ;.    pOp->p4.z 
8950: 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70  = pOut->z;.    p
8960: 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e  Op->p1 = pOut->n
8970: 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  ;.  }.  testcase
8980: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
8990: 42 49 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  BIG );.#endif.  
89a0: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
89b0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
89c0: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
89d0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
89e0: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72  .  }.  assert( r
89f0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
8a00: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8a10: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8a20: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8a30: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8a40: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
8a50: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
8a60: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
8a70: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
8a80: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
8a90: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
8aa0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8ab0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8ac0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  .**.** If P3 is 
8ad0: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65  not zero and the
8ae0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
8af0: 73 74 65 72 20 50 33 20 69 73 20 65 71 75 61 6c  ster P3 is equal
8b00: 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20   to P5, then.** 
8b10: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
8b20: 74 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20  the register P2 
8b30: 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  is converted to 
8b40: 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65  BLOB.  The conte
8b50: 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d  nt is.** the sam
8b60: 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  e sequence of by
8b70: 74 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c  tes, it is merel
8b80: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
8b90: 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a   a BLOB instead.
8ba0: 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20  ** of a string, 
8bb0: 61 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65  as if it had bee
8bc0: 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65  n CAST.  In othe
8bd0: 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69  r words:.**.** i
8be0: 66 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67  f( P3!=0 and reg
8bf0: 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50  [P3]==P5 ) reg[P
8c00: 32 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50  2] := CAST(reg[P
8c10: 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63  2] as BLOB).*/.c
8c20: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
8c30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8c40: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
8c50: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
8c60: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8c70: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8c80: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8c90: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
8ca0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
8cb0: 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34  Out->z = pOp->p4
8cc0: 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  .z;.  pOut->n = 
8cd0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d  pOp->p1;.  pOut-
8ce0: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
8cf0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
8d00: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69  OBSIZE(pOut);.#i
8d10: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b  fndef SQLITE_LIK
8d20: 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42  E_DOESNT_MATCH_B
8d30: 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e  LOBS.  if( pOp->
8d40: 70 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65  p3>0 ){.    asse
8d50: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8d60: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
8d70: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
8d80: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
8d90: 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
8da0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
8db0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28  M_Int );.    if(
8dc0: 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d   pIn3->u.i==pOp-
8dd0: 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67  >p5 ) pOut->flag
8de0: 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  s = MEM_Blob|MEM
8df0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
8e00: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62  ;.  }.#endif.  b
8e10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8e20: 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50  de: Null P1 P2 P
8e30: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
8e40: 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  s: r[P2..P3]=NUL
8e50: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
8e60: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8e70: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
8e80: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
8e90: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
8ea0: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
8eb0: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
8ec0: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
8ed0: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
8ee0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
8ef0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
8f00: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
8f10: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
8f20: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
8f30: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
8f40: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
8f50: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
8f60: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
8f70: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
8f80: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
8f90: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
8fa0: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
8fb0: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
8fc0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
8fd0: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
8fe0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
8ff0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
9000: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
9010: 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c   cnt;.  u16 null
9020: 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  Flag;.  pOut = o
9030: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
9040: 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70   pOp);.  cnt = p
9050: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
9060: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9070: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
9080: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9090: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
90a0: 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70  ullFlag = pOp->p
90b0: 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  1 ? (MEM_Null|ME
90c0: 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d  M_Cleared) : MEM
90d0: 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Null;.  pOut->n
90e0: 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 63   = 0;.  while( c
90f0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
9100: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
9110: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
9120: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9130: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
9140: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  t);.    pOut->fl
9150: 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a  ags = nullFlag;.
9160: 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b      pOut->n = 0;
9170: 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a  .    cnt--;.  }.
9180: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9190: 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20  pcode: SoftNull 
91a0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  P1 * * * *.** Sy
91b0: 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55  nopsis: r[P1]=NU
91c0: 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67  LL.**.** Set reg
91d0: 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65  ister P1 to have
91e0: 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20   the value NULL 
91f0: 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f  as seen by the O
9200: 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20  P_MakeRecord.** 
9210: 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74  instruction, but
9220: 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79   do not free any
9230: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
9240: 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65  memory associate
9250: 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65  d with.** the re
9260: 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20  gister, so that 
9270: 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73  if the value was
9280: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
9290: 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72  b that was.** pr
92a0: 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20  eviously copied 
92b0: 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20  using OP_SCopy, 
92c0: 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20  the copies will 
92d0: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76  continue to be v
92e0: 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alid..*/.case OP
92f0: 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61  _SoftNull: {.  a
9300: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
9310: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
9320: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9330: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20  rsor) );.  pOut 
9340: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9350: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
9360: 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d  = (pOut->flags|M
9370: 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e  EM_Null)&~MEM_Un
9380: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
9390: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
93a0: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20  Blob P1 P2 * P4 
93b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
93c0: 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29  [P2]=P4 (len=P1)
93d0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
93e0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
93f0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
9400: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
9410: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
9420: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
9430: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
9440: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
9450: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
9460: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
9470: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70  AX_LENGTH );.  p
9480: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9490: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
94a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
94b0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
94c0: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
94d0: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
94e0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
94f0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9500: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9510: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9520: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
9530: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9540: 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d  sis: r[P2]=param
9550: 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a  eter(P1,P4).**.*
9560: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76  * Transfer the v
9570: 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70  alues of bound p
9580: 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f  arameter P1 into
9590: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
95a0: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
95b0: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
95c0: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
95d0: 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68  ars in P4..** Th
95e0: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
95f0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
9600: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
9610: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
9620: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
9630: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9640: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
9650: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
9660: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
9670: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
9680: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
9690: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
96a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
96b0: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .z==0 || pOp->p4
96c0: 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74  .z==sqlite3VList
96d0: 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c  NumToName(p->pVL
96e0: 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  ist,pOp->p1) );.
96f0: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
9700: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
9710: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9720: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
9730: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
9740: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _big;.  }.  pOut
9750: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
9760: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
9770: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
9780: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
9790: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
97a0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
97b0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
97c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
97d0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
97e0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
97f0: 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a  P3]=r[P1@P3].**.
9800: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76  ** Move the P3 v
9810: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
9820: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
9830: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
9840: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
9850: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
9860: 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P3-1 are.** 
9870: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
9880: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
9890: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
98a0: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
98b0: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
98c0: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
98d0: 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  ap.  It is an er
98e0: 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f  ror.** for P3 to
98f0: 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e   be less than 1.
9900: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
9910: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20  : {.  int n;    
9920: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9930: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65   of registers le
9940: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
9950: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
9960: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
9970: 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69  copy from */.  i
9980: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
9990: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
99a0: 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d  opy to */..  n =
99b0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d   pOp->p3;.  p1 =
99c0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
99d0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
99e0: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
99f0: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
9a00: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
9a10: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
9a20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
9a30: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9a40: 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  [p2];.  do{.    
9a50: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
9a60: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
9a70: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
9a80: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
9a90: 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  1<=&aMem[(p->nMe
9aa0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
9ab0: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
9ac0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
9ad0: 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  1) );.    memAbo
9ae0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
9af0: 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ut);.    sqlite3
9b00: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
9b10: 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20  , pIn1);.#ifdef 
9b20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
9b30: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9b40: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
9b50: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
9b60: 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20  From<pOut ){.   
9b70: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
9b80: 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d  rom += pOp->p2 -
9b90: 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69   p1;.    }.#endi
9ba0: 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  f.    Deephemera
9bb0: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  lize(pOut);.    
9bc0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9bd0: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
9be0: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
9bf0: 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d  ++;.  }while( --
9c00: 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
9c10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
9c20: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9c30: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
9c40: 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d  P3+1]=r[P1@P3+1]
9c50: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
9c60: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  py of registers 
9c70: 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72  P1..P1+P3 into r
9c80: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9c90: 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P3..**.** This i
9ca0: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9cb0: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
9cc0: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
9cd0: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
9ce0: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
9cf0: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
9d00: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
9d10: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
9d20: 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20  P_Copy: {.  int 
9d30: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
9d40: 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  3;.  pIn1 = &aMe
9d50: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9d60: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9d70: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
9d80: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77  Out!=pIn1 );.  w
9d90: 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73  hile( 1 ){.    s
9da0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9db0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9dc0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
9dd0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
9de0: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
9df0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9e00: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
9e10: 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  rom = 0;.#endif.
9e20: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9e30: 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  CE(pOp->p2+pOp->
9e40: 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p3-n, pOut);.   
9e50: 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20   if( (n--)==0 ) 
9e60: 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b  break;.    pOut+
9e70: 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  +;.    pIn1++;. 
9e80: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
9e90: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
9ea0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
9eb0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
9ec0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  [P1].**.** Make 
9ed0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
9ee0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
9ef0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
9f00: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9f10: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
9f20: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
9f30: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
9f40: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
9f50: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
9f60: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
9f70: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
9f80: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
9f90: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
9fa0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
9fb0: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
9fc0: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
9fd0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9fe0: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
9ff0: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
a000: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
a010: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
a020: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
a030: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
a040: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
a050: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
a060: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
a070: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
a080: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
a090: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
a0a0: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
a0c0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
a0d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a0e0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a0f0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
a100: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
a110: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a120: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
a130: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
a140: 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  em);.#ifdef SQLI
a150: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
a160: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d  Out->pScopyFrom=
a170: 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70  =0 ) pOut->pScop
a180: 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65  yFrom = pIn1;.#e
a190: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
a1a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43  ./* Opcode: IntC
a1b0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
a1c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
a1d0: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  2]=r[P1].**.** T
a1e0: 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65  ransfer the inte
a1f0: 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69  ger value held i
a200: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
a210: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
a220: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e  **.** This is an
a230: 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69   optimized versi
a240: 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74  on of SCopy that
a250: 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20   works only for 
a260: 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65  integer.** value
a270: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  s..*/.case OP_In
a280: 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  tCopy: {        
a290: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
a2a0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
a2b0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
a2c0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
a2d0: 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
a2e0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a2f0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
a300: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
a310: 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e  4(pOut, pIn1->u.
a320: 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
a330: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
a340: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
a350: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75  .** Synopsis: ou
a360: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
a370: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
a380: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
a390: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
a3a0: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
a3b0: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
a3c0: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
a3d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
a3e0: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
a3f0: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
a400: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
a410: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
a420: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
a430: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
a440: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
a450: 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e  s to the r(P1)..
a460: 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65  r(P1+P2-1) value
a470: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
a480: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
a490: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
a4a0: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
a4b0: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
a4c0: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
a4d0: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
a4e0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
a4f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a500: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
a510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
a520: 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64  sor)+1 );..#ifnd
a530: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
a540: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
a550: 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72  .  /* Run the pr
a560: 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a  ogress counter j
a570: 75 73 74 20 62 65 66 6f 72 65 20 72 65 74 75 72  ust before retur
a580: 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ning..  */.  if(
a590: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
a5a0: 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e  0.   && nVmStep>
a5b0: 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a  =nProgressLimit.
a5c0: 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72     && db->xProgr
a5d0: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
a5e0: 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20  sArg)!=0.  ){.  
a5f0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
a600: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74  TERRUPT;.    got
a610: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
a620: 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rror;.  }.#endif
a630: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
a640: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
a650: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
a660: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
a670: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
a680: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
a690: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
a6a0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
a6b0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
a6c0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
a6d0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
a6e0: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
a6f0: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
a700: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
a710: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
a720: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
a730: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
a740: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
a750: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
a760: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
a770: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
a780: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a790: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
a7a0: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
a7b0: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
a7c0: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
a7d0: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
a7e0: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
a7f0: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
a800: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
a810: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
a820: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
a830: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
a840: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
a850: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
a860: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
a870: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
a880: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
a890: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
a8a0: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
a8b0: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
a8c0: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
a8d0: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
a8e0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
a8f0: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
a900: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
a910: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
a920: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
a930: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
a940: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
a950: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
a960: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
a970: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
a980: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
a990: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
a9a0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
a9b0: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
a9c0: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
a9d0: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
a9e0: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
a9f0: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
aa00: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
aa10: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
aa20: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
aa30: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
aa40: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
aa50: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
aa60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
aa70: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
aa80: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
aa90: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
aaa0: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
aab0: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
aac0: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
aad0: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
aae0: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
aaf0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
ab00: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
ab10: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
ab20: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
ab30: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73  _RELEASE);.  ass
ab40: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
ab50: 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61  OK );..  /* Inva
ab60: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
ab70: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
ab80: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
ab90: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
aba0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
abb0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
abc0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
abd0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
abe0: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
abf0: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
ac00: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
ac10: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
ac20: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
ac30: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
ac40: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
ac50: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
ac60: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
ac70: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
ac80: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
ac90: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
aca0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
acb0: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
acc0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
acd0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
ace0: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
acf0: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
ad00: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
ad10: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
ad20: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
ad30: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
ad40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
ad50: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
ad60: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
ad70: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
ad80: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
ad90: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
ada0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
adb0: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20   no_mem;..  if( 
adc0: 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c  db->mTrace & SQL
add0: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b  ITE_TRACE_ROW ){
ade0: 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
adf0: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
ae00: 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  , db->pTraceArg,
ae10: 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f   p, 0);.  }..  /
ae20: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
ae30: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
ae40: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
ae50: 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20  Op) + 1;.  rc = 
ae60: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
ae70: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
ae80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
ae90: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
aea0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
aeb0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
aec0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
aed0: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
aee0: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
aef0: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
af00: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
af10: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
af20: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
af30: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
af40: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
af50: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
af60: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
af70: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
af80: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
af90: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
afa0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
afb0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
afc0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
afd0: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
afe0: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
aff0: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
b000: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
b010: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
b020: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
b030: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
b040: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b050: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
b060: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
b070: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
b080: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b090: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
b0a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
b0b0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b0c0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
b0d0: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
b0e0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
b0f0: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
b100: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
b110: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b120: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
b130: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b140: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
b150: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
b160: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
b170: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
b180: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
b190: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
b1a0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
b1b0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
b1c0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
b1d0: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
b1e0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
b1f0: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
b200: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
b210: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
b220: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
b230: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
b240: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
b250: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b260: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
b270: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b280: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
b290: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
b2a0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
b2b0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
b2c0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
b2d0: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
b2e0: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
b2f0: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
b300: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
b310: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
b320: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
b330: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
b340: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
b350: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
b360: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
b370: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
b380: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
b390: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
b3a0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
b3b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b3c0: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
b3d0: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
b3e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b3f0: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
b400: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b410: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b420: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b430: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b440: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b450: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b460: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b470: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
b480: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b490: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b4a0: 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a  1]*r[P2].**.**.*
b4b0: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
b4c0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b4d0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
b4e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b4f0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b500: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b510: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b520: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b530: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b540: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b550: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
b560: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b570: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b580: 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]-r[P1].**.**
b590: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
b5a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b5b0: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
b5c0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b5d0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b5e0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b5f0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b600: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b610: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b620: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b630: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
b640: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b650: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
b660: 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]/r[P1].**.** 
b670: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
b680: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b690: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b6a0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b6b0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b6c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b6d0: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
b6e0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
b6f0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
b700: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
b710: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b720: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b730: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
b740: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b750: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b760: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
b770: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b780: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  is: r[P3]=r[P2]%
b790: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
b7a0: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
b7b0: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
b7c0: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
b7d0: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
b7e0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
b7f0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b800: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
b810: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b820: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b830: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
b840: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
b850: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b860: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b870: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b880: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b8a0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
b8b0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
b8c0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
b8d0: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
b8e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b8f0: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
b900: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b910: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
b920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b930: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
b940: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b950: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b970: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
b980: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
b990: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
b9a0: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
b9b0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b9c0: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
b9d0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
b9e0: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
b9f0: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
ba00: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
ba10: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
ba20: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
ba30: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
ba40: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
ba50: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
ba60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
ba70: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
ba80: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
ba90: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
baa0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
bab0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
bac0: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
bad0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bae0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
baf0: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
bb00: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
bb10: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
bb20: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bb30: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
bb40: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
bb50: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bb60: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
bb70: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
bb80: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
bb90: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
bba0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
bbb0: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
bbc0: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
bbd0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
bbe0: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
bbf0: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
bc00: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
bc10: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
bc20: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
bc30: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
bc40: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
bc50: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
bc60: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bc70: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
bc80: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
bc90: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
bca0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
bcb0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
bcc0: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
bcd0: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
bce0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
bcf0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
bd00: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
bd10: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
bd20: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
bd30: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
bd40: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
bd50: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
bd60: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
bd70: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
bd80: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
bd90: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
bda0: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
bdb0: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
bdc0: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
bdd0: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
bde0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
bdf0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
be00: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
be10: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
be20: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
be30: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
be40: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
be50: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
be60: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
be70: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
be80: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
be90: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
bea0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
beb0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bec0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bed0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bee0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
bef0: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
bf00: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
bf10: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
bf20: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
bf30: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bf40: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
bf50: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
bf60: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
bf70: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
bf80: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
bf90: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
bfa0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
bfb0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
bfc0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
bfd0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
bfe0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
bff0: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
c000: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c010: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c020: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
c030: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c040: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c050: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
c060: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c070: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
c080: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
c090: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
c0a0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
c0b0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c0c0: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
c0d0: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
c0e0: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
c0f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c100: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
c110: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
c120: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c130: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
c140: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
c150: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
c160: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
c170: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c180: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c190: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c1a0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c1b0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c1c0: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
c1d0: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
c1e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c1f0: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
c200: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c210: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
c220: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
c230: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c240: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c250: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
c260: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
c270: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
c280: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c290: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
c2a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
c2b0: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c2c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c2d0: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
c2e0: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
c2f0: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
c300: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
c310: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
c320: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
c330: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
c340: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
c350: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c360: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
c370: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
c380: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
c390: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c3a0: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
c3b0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
c3c0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
c3d0: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
c3e0: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
c3f0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c400: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
c410: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
c420: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
c430: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
c440: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
c450: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
c460: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
c470: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
c480: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
c490: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
c4a0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
c4b0: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
c4c0: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
c4d0: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
c4e0: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
c4f0: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
c500: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
c510: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
c520: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
c530: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
c540: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c550: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c560: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c570: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c580: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c590: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c5a0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c5b0: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c5c0: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c5d0: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c5e0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c5f0: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c600: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c610: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c620: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c630: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c640: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c650: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c660: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c680: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c690: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c6a0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c6b0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c6c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c6d0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c6e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
c6f0: 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20 50 33  nction0 P1 P2 P3
c700: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c710: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c720: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c730: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c740: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c750: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
c760: 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  Def object that.
c770: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
c780: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
c790: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
c7a0: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
c7b0: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
c7c0: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
c7d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c7e0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
c7f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
c800: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c810: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c820: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c830: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c840: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c850: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c860: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c870: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c880: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c890: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
c8a0: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
c8b0: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
c8c0: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
c8d0: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
c8e0: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
c8f0: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
c900: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
c910: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
c920: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
c930: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
c940: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
c950: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
c960: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
c970: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
c980: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
c990: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
c9a0: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
c9b0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
c9c0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63  * See also: Func
c9d0: 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c 20 41  tion, AggStep, A
c9e0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70  ggFinal.*/./* Op
c9f0: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
ca00: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ca10: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
ca20: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
ca30: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
ca40: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
ca50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
ca60: 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
ca70: 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  ext object that.
ca80: 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  ** contains a po
ca90: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e  inter to the fun
caa0: 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29  ction to be run)
cab0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
cac0: 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d  ts taken.** from
cad0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
cae0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
caf0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
cb00: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
cb10: 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ed.** in registe
cb20: 72 20 50 33 2e 20 20 52 65 67 69 73 74 65 72 20  r P3.  Register 
cb30: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
cb40: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
cb50: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
cb60: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
cb70: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
cb80: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
cb90: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
cba0: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
cbb0: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
cbc0: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
cbd0: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
cbe0: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
cbf0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
cc00: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
cc10: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
cc20: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
cc30: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
cc40: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
cc50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
cc60: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
cc70: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
cc80: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
cc90: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
cca0: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
ccb0: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
ccc0: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
ccd0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
cce0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66  ode..**.** SQL f
ccf0: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 69  unctions are ini
cd00: 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
cd10: 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77 69 74  OP_Function0 wit
cd20: 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  h P4 pointing.**
cd30: 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62   to a FuncDef ob
cd40: 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20 66 69  ject.  But on fi
cd50: 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20  rst evaluation, 
cd60: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 20 69  the P4 operand i
cd70: 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  s.** automatical
cd80: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  ly converted int
cd90: 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
cda0: 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  text object and 
cdb0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a  the operation.**
cdc0: 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68 69 73   changed to this
cdd0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63   OP_Function opc
cde0: 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ode.  In this wa
cdf0: 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
ce00: 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
ce10: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
ce20: 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20 6f 6e  object occurs on
ce30: 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65 72 20  ly once, rather 
ce40: 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61  than once for ea
ce50: 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e  ch.** evaluation
ce60: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
ce70: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
ce80: 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67  : Function0, Agg
ce90: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
cea0: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
ceb0: 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  on0: {.  int n;.
cec0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
ced0: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
cee0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
cef0: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
cf00: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
cf10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
cf20: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
cf30: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
cf40: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
cf50: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
cf60: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
cf70: 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
cf80: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
cf90: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
cfa0: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
cfb0: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
cfc0: 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
cfd0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
cfe0: 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
cff0: 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73  *pCtx) + (n-1)*s
d000: 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
d010: 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43  lue*));.  if( pC
d020: 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
d030: 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  mem;.  pCtx->pOu
d040: 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  t = 0;.  pCtx->p
d050: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
d060: 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
d070: 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
d080: 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
d090: 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
d0a0: 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70  >argc = n;.  pOp
d0b0: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55  ->p4type = P4_FU
d0c0: 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34  NCCTX;.  pOp->p4
d0d0: 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20  .pCtx = pCtx;.  
d0e0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
d0f0: 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20  _Function;.  /* 
d100: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
d110: 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f  o OP_Function */
d120: 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  .}.case OP_Funct
d130: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
d140: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
d150: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
d160: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d170: 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20  =P4_FUNCCTX );. 
d180: 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e   pCtx = pOp->p4.
d190: 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  pCtx;..  /* If t
d1a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
d1b0: 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
d1c0: 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
d1d0: 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
d1e0: 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
d1f0: 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
d200: 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
d210: 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
d220: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
d230: 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
d240: 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
d250: 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
d260: 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
d270: 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
d280: 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
d290: 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
d2a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
d2b0: 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ect */.  pOut = 
d2c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
d2d0: 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74    if( pCtx->pOut
d2e0: 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20 20 20   != pOut ){.    
d2f0: 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75  pCtx->pOut = pOu
d300: 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74  t;.    for(i=pCt
d310: 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b  x->argc-1; i>=0;
d320: 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76   i--) pCtx->argv
d330: 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  [i] = &aMem[pOp-
d340: 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d  >p2+i];.  }..  m
d350: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d360: 70 2c 20 70 4f 75 74 29 3b 0a 23 69 66 64 65 66  p, pOut);.#ifdef
d370: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
d380: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d  for(i=0; i<pCtx-
d390: 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >argc; i++){.   
d3a0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
d3b0: 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69  lid(pCtx->argv[i
d3c0: 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
d3d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
d3e0: 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  +i, pCtx->argv[i
d3f0: 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ]);.  }.#endif. 
d400: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
d410: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
d420: 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f  .  pCtx->fErrorO
d430: 72 41 75 78 20 3d 20 30 3b 0a 20 20 28 2a 70 43  rAux = 0;.  (*pC
d440: 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e  tx->pFunc->xSFun
d450: 63 29 28 70 43 74 78 2c 20 70 43 74 78 2d 3e 61  c)(pCtx, pCtx->a
d460: 72 67 63 2c 20 70 43 74 78 2d 3e 61 72 67 76 29  rgc, pCtx->argv)
d470: 3b 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35  ;/* IMP: R-24505
d480: 2d 32 33 32 33 30 20 2a 2f 0a 0a 20 20 2f 2a 20  -23230 */..  /* 
d490: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
d4a0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
d4b0: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
d4c0: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70  ption */.  if( p
d4d0: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d4e0: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
d4f0: 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
d500: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
d510: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
d520: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d530: 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63  pOut));.      rc
d540: 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
d550: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
d560: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
d570: 44 61 74 61 28 64 62 2c 20 26 70 2d 3e 70 41 75  Data(db, &p->pAu
d580: 78 44 61 74 61 2c 20 70 43 74 78 2d 3e 69 4f 70  xData, pCtx->iOp
d590: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
d5a0: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
d5b0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
d5c0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
d5d0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
d5e0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
d5f0: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
d600: 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67    if( pOut->flag
d610: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
d620: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71  _Blob) ){.    sq
d630: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
d640: 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
d650: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28  coding);.    if(
d660: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
d670: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 20 67 6f  ooBig(pOut) ) go
d680: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
d690: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
d6a0: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
d6b0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
d6c0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
d6d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d6e0: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
d6f0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
d700: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
d710: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
d720: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
d730: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
d740: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
d750: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
d760: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
d770: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
d780: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
d790: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
d7a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
d7b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
d7c0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
d7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
d7e0: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d7f0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d800: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d810: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d820: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d830: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d840: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d850: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d860: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d870: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d880: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d890: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
d8a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d8b0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
d8c0: 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]<<r[P1].**.
d8d0: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
d8e0: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
d8f0: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
d900: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
d910: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
d920: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
d930: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
d940: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
d950: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
d960: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
d970: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
d980: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
d990: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
d9a0: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
d9b0: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
d9c0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
d9d0: 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31  [P3]=r[P2]>>r[P1
d9e0: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
d9f0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
da00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
da10: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
da20: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
da30: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
da40: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
da50: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
da60: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
da70: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
da80: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
da90: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
daa0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
dab0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
dac0: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
dad0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
dae0: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
daf0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
db00: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db20: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
db30: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
db40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
db50: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
db60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
db70: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
db80: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
db90: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
dba0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
dbb0: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
dbc0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
dbd0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20   */.  i64 iA;.  
dbe0: 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42  u64 uA;.  i64 iB
dbf0: 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49  ;.  u8 op;..  pI
dc00: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
dc10: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
dc20: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
dc30: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
dc40: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
dc50: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
dc60: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
dc70: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
dc80: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
dc90: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
dca0: 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71  k;.  }.  iA = sq
dcb0: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
dcc0: 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20  e(pIn2);.  iB = 
dcd0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
dce0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20  lue(pIn1);.  op 
dcf0: 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
dd00: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41   if( op==OP_BitA
dd10: 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20  nd ){.    iA &= 
dd20: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
dd30: 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a  op==OP_BitOr ){.
dd40: 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20      iA |= iB;.  
dd50: 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20  }else if( iB!=0 
dd60: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  ){.    assert( o
dd70: 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74  p==OP_ShiftRight
dd80: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
dd90: 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  Left );..    /* 
dda0: 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61  If shifting by a
ddb0: 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74   negative amount
ddc0: 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f  , shift in the o
ddd0: 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a  ther direction *
dde0: 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29  /.    if( iB<0 )
ddf0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
de00: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f  OP_ShiftRight==O
de10: 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b  P_ShiftLeft+1 );
de20: 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50  .      op = 2*OP
de30: 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d  _ShiftLeft + 1 -
de40: 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20   op;.      iB = 
de50: 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a  iB>(-64) ? -iB :
de60: 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   64;.    }..    
de70: 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20  if( iB>=64 ){.  
de80: 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20      iA = (iA>=0 
de90: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
dea0: 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20  eft) ? 0 : -1;. 
deb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
dec0: 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c  memcpy(&uA, &iA,
ded0: 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20   sizeof(uA));.  
dee0: 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53      if( op==OP_S
def0: 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20  hiftLeft ){.    
df00: 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20      uA <<= iB;. 
df10: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
df20: 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20      uA >>= iB;. 
df30: 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65         /* Sign-e
df40: 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74  xtend on a right
df50: 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61   shift of a nega
df60: 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  tive number */. 
df70: 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20         if( iA<0 
df80: 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29  ) uA |= ((((u64)
df90: 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0xffffffff)<<32)
dfa0: 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20  |0xffffffff) << 
dfb0: 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d  (64-iB);.      }
dfc0: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69  .      memcpy(&i
dfd0: 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69  A, &uA, sizeof(i
dfe0: 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  A));.    }.  }. 
dff0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b   pOut->u.i = iA;
e000: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
e010: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
e020: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e030: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
e040: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e050: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
e060: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
e070: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
e080: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
e090: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
e0a0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
e0b0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
e0c0: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
e0d0: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
e0e0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
e0f0: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
e100: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
e110: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
e120: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
e130: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e140: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
e150: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
e160: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
e170: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
e180: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
e190: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
e1a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e1b0: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
e1c0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
e1d0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
e1e0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
e1f0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
e200: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
e210: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
e220: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
e230: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
e240: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
e250: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
e260: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
e270: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
e280: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
e290: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
e2a0: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
e2b0: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
e2c0: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
e2d0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e2e0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e2f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e300: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
e310: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
e320: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
e330: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
e340: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
e350: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
e360: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
e370: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
e380: 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  _Int)==0, 2);.  
e390: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e3a0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
e3b0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
e3c0: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
e3d0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
e3e0: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
e3f0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
e400: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
e410: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e420: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
e430: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
e440: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
e450: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
e460: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
e470: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e480: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
e490: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
e4a0: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
e4b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
e4c0: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
e4d0: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
e4e0: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
e4f0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
e500: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
e510: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
e520: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
e530: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
e540: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
e550: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
e560: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
e570: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
e580: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
e590: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
e5a0: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
e5b0: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
e5c0: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
e5d0: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
e5e0: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
e5f0: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
e620: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e630: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
e640: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
e650: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
e660: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
e670: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
e680: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
e690: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
e6a0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  AST./* Opcode: C
e6b0: 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
e6c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
e6d0: 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a  inity(r[P1]).**.
e6e0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
e6f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e700: 31 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65  1 to be the type
e710: 20 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a   defined by P2..
e720: 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ** .** <ul>.** <
e730: 6c 69 20 76 61 6c 75 65 3d 22 39 37 22 3e 20 54  li value="97"> T
e740: 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  EXT.** <li value
e750: 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c  ="98"> BLOB.** <
e760: 6c 69 20 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e  li value="99"> N
e770: 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61  UMERIC.** <li va
e780: 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e 54 45 47  lue="100"> INTEG
e790: 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  ER.** <li value=
e7a0: 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c  "101"> REAL.** <
e7b0: 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  /ul>.**.** A NUL
e7c0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
e7d0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
e7e0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
e7f0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
e800: 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20  e OP_Cast: {    
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e820: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
e830: 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54  ( pOp->p2>=SQLIT
e840: 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f  E_AFF_BLOB && pO
e850: 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46  p->p2<=SQLITE_AF
e860: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74  F_REAL );.  test
e870: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e880: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
e890: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e8a0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e8b0: 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74  F_BLOB );.  test
e8c0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e8d0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
e8e0: 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  C );.  testcase(
e8f0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
e900: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a  _AFF_INTEGER );.
e910: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e920: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e930: 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d  REAL );.  pIn1 =
e940: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e950: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
e960: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
e970: 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
e980: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
e990: 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31  VdbeMemCast(pIn1
e9a0: 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64  , pOp->p2, encod
e9b0: 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
e9c0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
e9d0: 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
e9e0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
e9f0: 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
ea00: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
ea10: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
ea20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
ea30: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ea40: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
ea50: 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P3]==r[P1].**.**
ea60: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
ea70: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
ea80: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
ea90: 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20  eg(P3)==reg(P1) 
eaa0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
eab0: 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20  address P2.  Or 
eac0: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  if the SQLITE_ST
ead0: 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65  OREP2 flag is se
eae0: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a  t in P5, then.**
eaf0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
eb00: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
eb10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
eb20: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
eb30: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
eb40: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
eb50: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
eb60: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
eb70: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
eb80: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
eb90: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
eba0: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
ebb0: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
ebc0: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
ebd0: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
ebe0: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
ebf0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
ec00: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
ec10: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
ec20: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
ec30: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
ec40: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
ec50: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
ec60: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
ec70: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
ec80: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
ec90: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
eca0: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
ecb0: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
ecc0: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
ecd0: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
ece0: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
ecf0: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
ed00: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
ed10: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
ed20: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
ed30: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
ed40: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
ed50: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
ed60: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
ed70: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
ed80: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
ed90: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
eda0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
edb0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
edc0: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
edd0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
ede0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
edf0: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
ee00: 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20 74  .** P4 is used t
ee10: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
ee20: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
ee30: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
ee40: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
ee50: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
ee60: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
ee70: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ee80: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
ee90: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
eea0: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
eeb0: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
eec0: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
eed0: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
eee0: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
eef0: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
ef00: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
ef10: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
ef20: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
ef30: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
ef40: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
ef50: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
ef60: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
ef70: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
ef80: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
ef90: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
efa0: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
efb0: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
efc0: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
efd0: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
efe0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
eff0: 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65   true.  If eithe
f000: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f010: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f020: 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49  t is false..** I
f030: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
f040: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
f050: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
f060: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
f070: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
f080: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
f090: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
f0a0: 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68  5..**.** If both
f0b0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
f0c0: 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  and SQLITE_KEEPN
f0d0: 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65  ULL flags are se
f0e0: 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f  t then the.** co
f0f0: 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69  ntent of r[P2] i
f100: 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69  s only changed i
f110: 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20  f the new value 
f120: 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61  is NULL or 0 (fa
f130: 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  lse)..** In othe
f140: 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72  r words, a prior
f150: 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c   r[P2] value wil
f160: 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69  l not be overwri
f170: 74 74 65 6e 20 62 79 20 31 20 28 74 72 75 65 29  tten by 1 (true)
f180: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f190: 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ne P1 P2 P3 P4 P
f1a0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f1b0: 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a  F r[P3]!=r[P1].*
f1c0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f1d0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71  just like the Eq
f1e0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f1f0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f200: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f210: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
f220: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
f230: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
f240: 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  See the Eq opcod
f250: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
f260: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f270: 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53  .**.** If both S
f280: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e  QLITE_STOREP2 an
f290: 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  d SQLITE_KEEPNUL
f2a0: 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  L flags are set 
f2b0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74  then the.** cont
f2c0: 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20  ent of r[P2] is 
f2d0: 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20  only changed if 
f2e0: 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73  the new value is
f2f0: 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65   NULL or 1 (true
f300: 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  )..** In other w
f310: 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b  ords, a prior r[
f320: 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e  P2] value will n
f330: 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ot be overwritte
f340: 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a  n by 0 (false)..
f350: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  */./* Opcode: Lt
f360: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f370: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
f380: 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P3]<r[P1].**.*
f390: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
f3a0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
f3b0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
f3c0: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
f3d0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
f3e0: 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20  address P2.  Or 
f3f0: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  if the SQLITE_ST
f400: 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65  OREP2 flag is se
f410: 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a  t in P5 store.**
f420: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
f430: 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20  omparison (0 or 
f440: 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20  1 or NULL) into 
f450: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
f460: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
f470: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
f480: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
f490: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
f4a0: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
f4b0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74   NULL then the t
f4c0: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
f4d0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
f4e0: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
f4f0: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
f500: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
f510: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f520: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
f530: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
f540: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
f550: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
f560: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
f570: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
f580: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
f590: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
f5a0: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
f5b0: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
f5c0: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
f5d0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
f5e0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
f5f0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
f600: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
f610: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
f620: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
f630: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
f640: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
f650: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
f660: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
f670: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
f680: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
f690: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
f6a0: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
f6b0: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
f6c0: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
f6d0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
f6e0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f6f0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
f700: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
f710: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
f720: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
f730: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
f740: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
f750: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
f760: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
f770: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
f780: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
f790: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
f7a0: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
f7b0: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
f7c0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
f7d0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
f7e0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
f7f0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
f800: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
f810: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
f820: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
f830: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
f840: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
f850: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
f860: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
f870: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
f880: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
f890: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
f8a0: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
f8b0: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
f8c0: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
f8d0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
f8e0: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
f8f0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
f900: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
f910: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
f920: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
f930: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
f940: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f950: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
f960: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f970: 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a  F r[P3]<=r[P1].*
f980: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f990: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f9a0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f9b0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f9c0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f9d0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f9e0: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
f9f0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
fa00: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
fa10: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
fa20: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
fa30: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
fa40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
fa50: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
fa60: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fa70: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
fa80: 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P3]>r[P1].**.** 
fa90: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
faa0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
fab0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
fac0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
fad0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
fae0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
faf0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
fb00: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
fb10: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
fb20: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
fb30: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
fb40: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
fb50: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
fb60: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fb70: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
fb80: 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]>=r[P1].**.
fb90: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
fba0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
fbb0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
fbc0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
fbd0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
fbe0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
fbf0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
fc00: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
fc10: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
fc20: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
fc30: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
fc40: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
fc50: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
fc60: 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20  /.case OP_Eq:   
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fc80: 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75  ame as TK_EQ, ju
fc90: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
fca0: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20  case OP_Ne:     
fcb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fcc0: 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70  e as TK_NE, jump
fcd0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
fce0: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20  se OP_Lt:       
fcf0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fd00: 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20  as TK_LT, jump, 
fd10: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
fd20: 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20   OP_Le:         
fd30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fd40: 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LE, jump, in
fd50: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
fd60: 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Gt:           
fd70: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fd80: 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GT, jump, in1,
fd90: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
fda0: 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Ge: {           
fdb0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fdc0: 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GE, jump, in1, i
fdd0: 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c  n3 */.  int res,
fde0: 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52   res2;      /* R
fdf0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d  esult of the com
fe00: 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20  parison of pIn1 
fe10: 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a  against pIn3 */.
fe20: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
fe30: 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
fe40: 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d  y to use for com
fe50: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36  parison */.  u16
fe60: 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20   flags1;        
fe70: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
fe80: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
fe90: 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31  1->flags */.  u1
fea0: 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20  6 flags3;       
feb0: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
fec0: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
fed0: 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20  n3->flags */..  
fee0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fef0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
ff00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
ff10: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
ff20: 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33  >flags;.  flags3
ff30: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
ff40: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
ff50: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c  flags3)&MEM_Null
ff60: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
ff70: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
ff80: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
ff90: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
ffa0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
ffb0: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
ffc0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
ffd0: 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
ffe0: 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
fff0: 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
10000 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
10010 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
10020 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
10030 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
10040 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
10050 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
10060 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
10070 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
10080 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
10090 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
100a0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
100b0 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61      assert( (fla
100c0 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65  gs1 & MEM_Cleare
100d0 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  d)==0 );.      a
100e0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
100f0 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
10100 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  ULL)==0 );.     
10110 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61   if( (flags1&fla
10120 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
10130 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
10140 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
10150 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
10160 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
10170 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71   Operands are eq
10180 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
10190 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
101a0 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 1;  /* Operand
101b0 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
101c0 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  */.      }.    }
101d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53  else{.      /* S
101e0 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
101f0 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61  clear and at lea
10200 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69  st one operand i
10210 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a  s NULL,.      **
10220 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
10230 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e   is always NULL.
10240 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  .      ** The ju
10250 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
10260 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
10270 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
10280 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10290 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
102a0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
102b0 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26          pOut = &
102c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
102d0 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20         iCompare 
102e0 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61  = 1;    /* Opera
102f0 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61  nds are not equa
10300 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d  l */.        mem
10310 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
10320 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20   pOut);.        
10330 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10340 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
10350 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
10360 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
10370 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
10380 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
10390 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
103a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
103b0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
103c0 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
103d0 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
103e0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
103f0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
10400 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
10410 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
10420 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
10430 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
10440 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
10450 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
10460 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
10470 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
10480 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
10490 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
104a0 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c     if( (flags1 |
104b0 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72   flags3)&MEM_Str
104c0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
104d0 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
104e0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
104f0 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
10500 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  {.          appl
10510 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
10520 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn1,0);.      
10530 20 20 20 20 74 65 73 74 63 61 73 65 28 20 66 6c      testcase( fl
10540 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67  ags3!=pIn3->flag
10550 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c 65  s ); /* Possible
10560 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20 2a   if pIn1==pIn3 *
10570 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  /.          flag
10580 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
10590 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
105a0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
105b0 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
105c0 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
105d0 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
105e0 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
105f0 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
10600 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10610 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e    }.      /* Han
10620 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
10630 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63  ase of integer c
10640 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20  omparison here, 
10650 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f  as an.      ** o
10660 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20  ptimization, to 
10670 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20  avoid a call to 
10680 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
10690 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  e() */.      if(
106a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
106b0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
106c0 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
106d0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
106e0 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i > pIn1->u.i )
106f0 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f  { res = +1; goto
10700 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10710 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
10720 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69  >u.i < pIn1->u.i
10730 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f   ){ res = -1; go
10740 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d  to compare_op; }
10750 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
10760 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63  ;.        goto c
10770 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20  ompare_op;.     
10780 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
10790 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
107a0 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
107b0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
107c0 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
107d0 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
107e0 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
107f0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
10800 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10810 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
10820 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10830 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10840 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
10850 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10860 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31  emStringify(pIn1
10870 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
10880 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10890 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79  ( (flags1&MEM_Dy
108a0 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  n) != (pIn1->fla
108b0 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
108c0 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20         flags1 = 
108d0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn1->flags & ~
108e0 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
108f0 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79  (flags1 & MEM_Ty
10900 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20  peMask);.       
10910 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
10920 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  In3 );.      }. 
10930 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
10940 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
10950 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  & (flags3 & (MEM
10960 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
10970 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
10980 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10990 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
109a0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
109b0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
109c0 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
109d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
109e0 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
109f0 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  3, encoding, 1);
10a00 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10a10 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44  e( (flags3&MEM_D
10a20 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c  yn) != (pIn3->fl
10a30 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
10a40 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d          flags3 =
10a50 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
10a60 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
10a70 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54   (flags3 & MEM_T
10a80 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
10a90 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
10aa0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
10ab0 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
10ac0 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
10ad0 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
10ae0 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
10af0 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
10b00 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63  p4.pColl);.  }.c
10b10 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 73 77 69  ompare_op:.  swi
10b20 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
10b30 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
10b40 45 71 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65  Eq:    res2 = re
10b50 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
10b60 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
10b70 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3b 20      res2 = res; 
10b80 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
10b90 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
10ba0 20 72 65 73 32 20 3d 20 72 65 73 3c 30 3b 20 20   res2 = res<0;  
10bb0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10bc0 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65  ase OP_Le:    re
10bd0 73 32 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  s2 = res<=0;    
10be0 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10bf0 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 32 20   OP_Gt:    res2 
10c00 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
10c10 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
10c20 3a 20 20 20 20 20 20 20 72 65 73 32 20 3d 20 72  :       res2 = r
10c30 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
10c40 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f  ;.  }..  /* Undo
10c50 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
10c60 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
10c70 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
10c80 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
10c90 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
10ca0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
10cb0 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d  ) == (flags1 & M
10cc0 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e  EM_Dyn) );.  pIn
10cd0 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  1->flags = flags
10ce0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  1;.  assert( (pI
10cf0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10d00 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20  Dyn) == (flags3 
10d10 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10d20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn3->flags = fl
10d30 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ags3;..  if( pOp
10d40 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
10d50 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
10d60 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10d70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  2];.    iCompare
10d80 20 3d 20 72 65 73 3b 0a 20 20 20 20 72 65 73 32   = res;.    res2
10d90 20 3d 20 72 65 73 32 21 3d 30 3b 20 20 2f 2a 20   = res2!=0;  /* 
10da0 46 6f 72 20 74 68 69 73 20 70 61 74 68 20 72 65  For this path re
10db0 73 32 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  s2 must be exact
10dc0 6c 79 20 30 20 6f 72 20 31 20 2a 2f 0a 20 20 20  ly 0 or 1 */.   
10dd0 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
10de0 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29  SQLITE_KEEPNULL)
10df0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  !=0 ){.      /* 
10e00 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  The KEEPNULL fla
10e10 67 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71  g prevents OP_Eq
10e20 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
10e30 67 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a  g a NULL with 1.
10e40 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65        ** and pre
10e50 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d  vents OP_Ne from
10e60 20 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c   overwriting NUL
10e70 4c 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20  L with 0.  This 
10e80 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73  flag.      ** is
10e90 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f   only used in co
10ea0 6e 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74  ntexts where eit
10eb0 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20  her:.      **   
10ec0 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26  (1) op==OP_Eq &&
10ed0 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c   (r[P2]==NULL ||
10ee0 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20   r[P2]==0).     
10ef0 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50   **   (2) op==OP
10f00 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Ne && (r[P2]==N
10f10 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29  ULL || r[P2]==1)
10f20 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66  .      ** Theref
10f30 6f 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65  ore it is not ne
10f40 63 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b  cessary to check
10f50 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
10f60 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20  r[P2] for.      
10f70 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20  ** NULL. */.    
10f80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
10f90 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20  pcode==OP_Ne || 
10fa0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10fb0 45 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Eq );.      asse
10fc0 72 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72  rt( res2==0 || r
10fd0 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  es2==1 );.      
10fe0 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10ff0 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 && pOp->opcode
11000 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
11010 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
11020 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =1 && pOp->opcod
11030 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
11040 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
11050 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 && pOp->opco
11060 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
11070 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
11080 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==1 && pOp->opc
11090 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
110a0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
110b0 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65  code==OP_Eq)==re
110c0 73 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  s2 ) break;.    
110d0 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  }.    memAboutTo
110e0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
110f0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
11100 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
11110 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
11120 69 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45  i = res2;.    RE
11130 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
11140 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
11150 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
11160 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
11170 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  , (pOp->p5 & SQL
11180 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29  ITE_NULLEQ)?2:3)
11190 3b 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29  ;.    if( res2 )
111a0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  {.      goto jum
111b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
111c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
111d0 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f  * Opcode: ElseNo
111e0 74 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  tEq * P2 * * *.*
111f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
11200 20 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c   must immediatel
11210 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c  y follow an OP_L
11220 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61  t or OP_Gt compa
11230 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a  rison operator..
11240 2a 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20  ** If result of 
11250 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
11260 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  son on the same 
11270 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  two operands.** 
11280 77 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55  would have be NU
11290 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c  LL or false (0),
112a0 20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20   then then jump 
112b0 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68  to P2. .** If th
112c0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f  e result of an O
112d0 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20  P_Eq comparison 
112e0 6f 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69  on the two previ
112f0 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  ous operands.** 
11300 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
11310 74 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66  true (1), then f
11320 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
11330 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45  case OP_ElseNotE
11340 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61  q: {       /* sa
11350 6d 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c  me as TK_ESCAPE,
11360 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
11370 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
11380 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
11390 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c  opcode==OP_Lt ||
113a0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
113b0 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65  =OP_Gt );.  asse
113c0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26  rt( pOp[-1].p5 &
113d0 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
113e0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
113f0 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30  aken(iCompare!=0
11400 2c 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d  , 2);.  if( iCom
11410 70 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a  pare!=0 ) goto j
11420 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
11430 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
11440 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
11450 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
11460 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
11470 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
11480 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
11490 74 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a  tor in the next.
114a0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
114b0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
114c0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
114d0 65 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a  e P4 operand..**
114e0 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
114f0 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
11500 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
11510 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74   OP_Compare that
11520 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c   has.** the OPFL
11530 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
11540 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61  et in P5. Typica
11550 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
11560 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a  tation should .*
11570 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74  * occur immediat
11580 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
11590 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a   OP_Compare..**.
115a0 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74  ** The first int
115b0 65 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69  eger in the P4 i
115c0 6e 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20  nteger array is 
115d0 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  the length of th
115e0 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64  e array.** and d
115f0 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70  oes not become p
11600 61 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75  art of the permu
11610 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  tation..*/.case 
11620 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
11630 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
11640 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
11650 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
11660 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
11670 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
11680 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70  .opcode==OP_Comp
11690 61 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  are );.  assert(
116a0 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46   pOp[1].p5 & OPF
116b0 4c 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20  LAG_PERMUTE );. 
116c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
116d0 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
116e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
116f0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50  Synopsis: r[P1@P
11700 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a  3] <-> r[P2@P3].
11710 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
11720 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
11730 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
11740 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
11750 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
11760 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
11770 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
11780 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
11790 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
117a0 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
117b0 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
117c0 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
117d0 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
117e0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
117f0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
11800 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f   set, then the o
11810 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  rder of comparis
11820 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69  on is.** determi
11830 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ned by the most 
11840 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74  recent OP_Permut
11850 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20  ation operator. 
11860 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   If the.** OPFLA
11870 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73  G_PERMUTE bit is
11880 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67   clear, then reg
11890 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72  ister are compar
118a0 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c  ed in sequential
118b0 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  .** order..**.**
118c0 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
118d0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
118e0 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
118f0 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
11900 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
11910 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
11920 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
11930 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
11940 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
11950 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
11960 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
11970 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
11980 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
11990 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
119a0 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
119b0 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
119c0 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
119d0 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
119e0 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
119f0 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
11a00 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
11a10 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
11a20 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
11a30 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
11a40 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
11a50 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
11a60 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
11a70 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
11a80 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
11a90 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
11aa0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11ab0 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
11ac0 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
11ad0 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
11ae0 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
11af0 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
11b00 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
11b10 74 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  te;     /* The p
11b20 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20  ermutation */.. 
11b30 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
11b40 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d  OPFLAG_PERMUTE)=
11b50 3d 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75  =0 ){.    aPermu
11b60 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  te = 0;.  }else{
11b70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
11b80 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
11b90 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
11ba0 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69  de==OP_Permutati
11bb0 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  on );.    assert
11bc0 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
11bd0 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
11be0 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20  .    aPermute = 
11bf0 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20  pOp[-1].p4.ai + 
11c00 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  1;.    assert( a
11c10 50 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20  Permute!=0 );.  
11c20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  }.  n = pOp->p3;
11c30 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
11c40 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
11c50 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
11c60 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
11c70 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
11c80 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
11c90 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66   pOp->p2;.#ifdef
11ca0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
11cb0 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
11cc0 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
11cd0 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
11ce0 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
11cf0 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
11d00 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
11d10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11d20 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
11d30 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11d40 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
11d50 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
11d60 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
11d70 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11d80 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11d90 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11da0 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p1+n<=(p->nMem+1
11db0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11dc0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11dd0 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
11de0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11df0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
11e00 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11e10 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
11e20 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
11e30 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
11e40 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
11e50 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
11e60 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11e70 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
11e80 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
11e90 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
11ea0 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
11eb0 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
11ec0 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
11ed0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11ee0 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
11ef0 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
11f00 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
11f10 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
11f20 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
11f30 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
11f40 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
11f50 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
11f60 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
11f70 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
11f80 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
11f90 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
11fa0 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
11fb0 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
11fc0 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
11fd0 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
11fe0 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
11ff0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  k;.    }.  }.  b
12000 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12010 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
12020 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12030 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
12040 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
12050 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
12060 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
12070 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
12080 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
12090 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
120a0 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
120b0 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
120c0 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
120d0 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
120e0 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
120f0 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
12100 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
12110 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
12120 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
12130 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
12140 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70  hTaken(0,3); pOp
12150 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
12160 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
12170 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
12180 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
12190 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d  aken(1,3); pOp =
121a0 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
121b0 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
121c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
121d0 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,3); pOp = &aO
121e0 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
121f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12200 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
12210 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12220 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12230 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
12240 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12250 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
12260 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
12270 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
12280 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
12290 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
122a0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
122b0 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
122c0 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
122d0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
122e0 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
122f0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12300 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
12310 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
12320 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
12330 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
12340 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
12350 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12360 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12370 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
12380 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12390 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
123a0 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
123b0 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
123c0 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
123d0 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
123e0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
123f0 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
12400 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
12410 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
12420 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
12430 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
12440 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
12450 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
12460 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
12470 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
12480 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
12490 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
124a0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
124b0 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
124c0 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
124d0 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
124e0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
124f0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
12500 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
12510 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
12520 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
12530 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12540 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
12550 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
12560 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
12570 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12580 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12590 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
125a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
125b0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
125c0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
125d0 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
125e0 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
125f0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12600 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
12610 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
12620 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
12630 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
12640 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
12650 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
12660 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
12670 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
12680 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
12690 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
126a0 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
126b0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
126c0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
126d0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
126e0 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
126f0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
12700 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12710 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
12720 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
12730 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
12740 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
12750 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
12760 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
12770 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12780 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
12790 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
127a0 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
127b0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
127c0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
127d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
127e0 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
127f0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
12800 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
12810 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12820 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
12830 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
12840 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
12850 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
12860 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
12870 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
12880 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
12890 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
128a0 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
128b0 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
128c0 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
128d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
128e0 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
128f0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
12900 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
12910 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
12920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12930 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
12940 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
12950 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12960 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
12970 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
12980 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12990 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
129a0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
129b0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
129c0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
129d0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
129e0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71   pOut->u.i = !sq
129f0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
12a00 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
12a10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12a20 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
12a30 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12a40 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
12a50 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12a60 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12a70 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12a80 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12a90 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
12aa0 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
12ab0 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
12ac0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12ad0 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
12ae0 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
12af0 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12b00 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12b20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12b30 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12b40 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12b50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12b60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12b70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12b80 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12b90 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12ba0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12bb0 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12bc0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12bd0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12be0 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
12bf0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12c00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12c10 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12c20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
12c30 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
12c40 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
12c50 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74 69  ion the first ti
12c60 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  me this opcode i
12c70 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64  s.** encountered
12c80 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61 74   on each invocat
12c90 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65 2d  ion of the byte-
12ca0 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a  code program.  J
12cb0 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20  ump to P2.** on 
12cc0 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 61  the second and a
12cd0 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65 6e  ll subsequent en
12ce0 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67 20  counters during 
12cf0 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61 74  the same invocat
12d00 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c  ion..**.** Top-l
12d10 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64 65  evel programs de
12d20 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69 6e  termine first in
12d30 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70  vocation by comp
12d40 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20  aring the P1.** 
12d50 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74 20  operand against 
12d60 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20 6f  the P1 operand o
12d70 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70  n the OP_Init op
12d80 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67 69  code at the begi
12d90 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20  nning.** of the 
12da0 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68 65  program.  If the
12db0 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65   P1 values diffe
12dc0 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  r, then fall thr
12dd0 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a  ough and make.**
12de0 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73 20   the P1 of this 
12df0 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f 20  opcode equal to 
12e00 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69  the P1 of OP_Ini
12e10 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65 73  t.  If P1 values
12e20 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   are.** the same
12e30 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
12e40 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73  ump..**.** For s
12e50 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65 72  ubprograms, ther
12e60 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20 69  e is a bitmask i
12e70 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20  n the VdbeFrame 
12e80 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 0a  that determines.
12e90 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
12ea0 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c  t the jump shoul
12eb0 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68 65  d be taken.  The
12ec0 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63 65   bitmask is nece
12ed0 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73 65  ssary.** because
12ee0 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72 69   the self-alteri
12ef0 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64 6f  ng code trick do
12f00 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20  es not work for 
12f10 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72 69  recursive.** tri
12f20 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ggers..*/.case O
12f30 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
12f40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
12f50 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20 20  .  u32 iAddr;   
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12f70 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73 20  Address of this 
12f80 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
12f90 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b   assert( p->aOp[
12fa0 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  0].opcode==OP_In
12fb0 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  it );.  if( p->p
12fc0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41 64  Frame ){.    iAd
12fd0 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  dr = (int)(pOp -
12fe0 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66   p->aOp);.    if
12ff0 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f  ( (p->pFrame->aO
13000 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20 28  nce[iAddr/8] & (
13010 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29 29  1<<(iAddr & 7)))
13020 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62  !=0 ){.      Vdb
13030 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
13040 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
13050 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
13060 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e  .    p->pFrame->
13070 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c  aOnce[iAddr/8] |
13080 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29  = 1<<(iAddr & 7)
13090 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
130a0 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d  f( p->aOp[0].p1=
130b0 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  =pOp->p1 ){.    
130c0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
130d0 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
130e0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
130f0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65      }.  }.  Vdbe
13100 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32  BranchTaken(0, 2
13110 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  );.  pOp->p1 = p
13120 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62  ->aOp[0].p1;.  b
13130 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13140 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
13150 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13160 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13170 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13180 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
13190 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
131a0 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
131b0 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
131c0 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
131d0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
131e0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
131f0 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13200 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13210 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a   non-zero..*/./*
13220 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
13230 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
13240 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
13250 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
13260 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
13270 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
13280 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
13290 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
132a0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
132b0 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
132c0 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
132d0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
132e0 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64   the jump if and
132f0 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e   only if P3 is n
13300 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  on-zero..*/.case
13310 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
13320 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
13330 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
13340 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
13350 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
13360 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
13370 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
13380 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
13390 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
133a0 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
133b0 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
133c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
133d0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
133e0 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
133f0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
13400 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
13410 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
13420 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
13430 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
13440 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
13450 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
13460 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65  = !c;.  }.  Vdbe
13470 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30  BranchTaken(c!=0
13480 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b  , 2);.  if( c ){
13490 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
134a0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
134b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
134c0 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
134d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
134e0 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
134f0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
13500 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
13510 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13520 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
13530 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
13540 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
13550 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
13560 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
13570 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
13580 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
13590 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
135a0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
135b0 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
135c0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
135d0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
135e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
135f0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13600 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13610 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
13620 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
13630 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
13640 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
13650 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13660 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
13670 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
13680 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
13690 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
136a0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
136b0 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
136c0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
136d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
136e0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
136f0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
13700 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13710 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
13720 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13730 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
13740 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13750 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
13760 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
13770 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34  lumn P1 P2 P3 P4
13780 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
13790 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20   r[P3]=PX.**.** 
137a0 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64 61  Interpret the da
137b0 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  ta that cursor P
137c0 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61  1 points to as a
137d0 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c 74   structure built
137e0 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61   using.** the Ma
137f0 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
13800 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20  tion.  (See the 
13810 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64  MakeRecord opcod
13820 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
13830 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
13840 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74  about the format
13850 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20 20   of the data.)  
13860 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d 74  Extract the P2-t
13870 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d  h column.** from
13880 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49   this record.  I
13890 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73 73  f there are less
138a0 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a   that (P2+1) .**
138b0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72   values in the r
138c0 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61  ecord, extract a
138d0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
138e0 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65 64   value extracted
138f0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
13900 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
13910 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   If the column c
13920 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74 68  ontains fewer th
13930 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68  an P2 fields, th
13940 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  en extract a NUL
13950 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68  L.  Or,.** if th
13960 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  e P4 argument is
13970 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68   a P4_MEM use th
13980 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
13990 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a  4 argument as.**
139a0 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a   the result..**.
139b0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
139c0 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74 20  _CLEARCACHE bit 
139d0 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64  is set on P5 and
139e0 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
139f0 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a  table cursor,.**
13a00 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65 20   then the cache 
13a10 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  of the cursor is
13a20 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20   reset prior to 
13a30 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20 63  extracting the c
13a40 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69  olumn..** The fi
13a50 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67  rst OP_Column ag
13a60 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74  ainst a pseudo-t
13a70 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20 76  able after the v
13a80 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  alue of the cont
13a90 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ent.** register 
13aa0 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75  has changed shou
13ab0 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69 74  ld have this bit
13ac0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   set..**.** If t
13ad0 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  he OPFLAG_LENGTH
13ae0 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
13af0 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72  YPEOFARG bits ar
13b00 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68 65 6e  e set on P5 when
13b10 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
13b20 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  s guaranteed to 
13b30 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
13b40 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20  the argument of 
13b50 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72  a length().** or
13b60 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
13b70 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
13b80 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f  .  The loading o
13b90 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61  f large blobs ca
13ba0 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20  n be.** skipped 
13bb0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64  for length() and
13bc0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61   all content loa
13bd0 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70  ding can be skip
13be0 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  ped for typeof()
13bf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
13c00 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32 3b  umn: {.  int p2;
13c10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
13c20 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
13c30 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
13c40 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
13c50 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
13c60 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  sor */.  BtCurso
13c70 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
13c80 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
13c90 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
13ca0 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
13cb0 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
13cc0 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
13cd0 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
13ce0 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
13cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
13d00 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
13d10 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
13d20 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
13d30 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
13d40 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
13d50 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nter */.  Mem *p
13d60 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
13d70 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
13d80 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
13d90 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
13da0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
13db0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
13dc0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
13dd0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
13de0 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61   *zData;   /* Pa
13df0 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
13e00 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
13e10 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48  /.  const u8 *zH
13e20 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75  dr;    /* Next u
13e30 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20  nparsed byte of 
13e40 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
13e50 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64  const u8 *zEndHd
13e60 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  r; /* Pointer to
13e70 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
13e80 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
13e90 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20 20 20    u32 offset;   
13ea0 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69       /* Offset i
13eb0 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a 2f 0a  nto the data */.
13ec0 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20    u64 offset64; 
13ed0 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f       /* 64-bit o
13ee0 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 61  ffset */.  u32 a
13ef0 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  vail;         /*
13f00 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
13f10 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61   of available da
13f20 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20  ta */.  u32 t;  
13f30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
13f40 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74  type code from t
13f50 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
13f60 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b   */.  Mem *pReg;
13f70 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75           /* Pseu
13f80 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65  doTable input re
13f90 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20  gister */..  pC 
13fa0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
13fb0 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  p1];.  p2 = pOp-
13fc0 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  >p2;..  /* If th
13fd0 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20 69  e cursor cache i
13fe0 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67 20 69  s stale, bring i
13ff0 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a  t up-to-date */.
14000 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
14010 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26  beCursorMoveto(&
14020 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20  pC, &p2);.  if( 
14030 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
14040 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
14050 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
14060 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
14070 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
14080 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
14090 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
140a0 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
140b0 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
140c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
140d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
140e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
140f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
14100 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32   );.  assert( p2
14110 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20  <pC->nField );. 
14120 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61   aOffset = pC->a
14130 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74  Offset;.  assert
14140 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
14150 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
14160 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
14170 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
14180 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
14190 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72  llRow );.  asser
141a0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
141b0 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20  =CURTYPE_SORTER 
141c0 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  );..  if( pC->ca
141d0 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
141e0 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20 20  cheCtr ){       
141f0 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d           /*OPTIM
14200 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
14210 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
14220 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
14230 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
14240 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  ==CURTYPE_PSEUDO
14250 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
14260 72 74 28 20 70 43 2d 3e 75 63 2e 70 73 65 75 64  rt( pC->uc.pseud
14270 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20  oTableReg>0 );. 
14280 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
14290 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64  Mem[pC->uc.pseud
142a0 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20  oTableReg];.    
142b0 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
142c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
142d0 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ob );.        as
142e0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
142f0 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20  (pReg) );.      
14300 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
14310 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20  e = pC->szRow = 
14320 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b  avail = pReg->n;
14330 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
14340 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a  w = (u8*)pReg->z
14350 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14360 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
14370 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
14380 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  st);.        got
14390 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
143a0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
143b0 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20  se{.      pCrsr 
143c0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
143d0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
143e0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
143f0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
14400 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
14410 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  sr );.      asse
14420 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
14430 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
14440 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43  rsr) );.      pC
14450 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
14460 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
14470 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
14480 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
14490 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
144a0 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c  loadFetch(pCrsr,
144b0 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
144c0 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
144d0 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
144e0 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
144f0 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
14500 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
14510 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
14520 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
14530 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
14540 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
14550 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 61  }else if( pC->pa
14560 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
14570 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
14580 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
14590 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
145a0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
145b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
145c0 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
145d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
145e0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
145f0 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
14600 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  r;.    pC->iHdrO
14610 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e  ffset = getVarin
14620 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66  t32(pC->aRow, of
14630 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  fset);.    pC->n
14640 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20  HdrParsed = 0;. 
14650 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20     aOffset[0] = 
14660 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66  offset;...    if
14670 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29  ( avail<offset )
14680 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
14690 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
146a0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
146b0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
146c0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
146d0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
146e0 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
146f0 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
14700 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
14710 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
14720 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
14730 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
14740 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
14750 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
14760 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
14770 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
14780 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
14790 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
147a0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
147b0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
147c0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
147d0 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
147e0 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
147f0 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
14800 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
14810 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
14820 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
14830 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
14840 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
14850 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
14860 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
14870 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
14880 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
14890 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
148a0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
148b0 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
148c0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
148d0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
148e0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
148f0 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
14900 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
14910 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
14920 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
14930 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
14940 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
14950 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
14960 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
14970 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
14980 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
14990 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
149a0 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
149b0 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
149c0 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
149d0 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
149e0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6f 66 66  */.      if( off
149f0 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
14a00 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
14a10 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
14a20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
14a30 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
14a40 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
14a50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
14a60 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
14a70 69 66 28 20 6f 66 66 73 65 74 3e 30 20 29 7b 20  if( offset>0 ){ 
14a80 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14a90 46 2d 54 52 55 45 2a 2f 0a 20 20 20 20 20 20 2f  F-TRUE*/.      /
14aa0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
14ab0 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d  goto is an optim
14ac0 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e  ization.  It can
14ad0 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a   be omitted and.
14ae0 20 20 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68        ** everyth
14af0 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77  ing will still w
14b00 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c  ork.  But OP_Col
14b10 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c  umn is measurabl
14b20 79 20 66 61 73 74 65 72 0a 20 20 20 20 20 20 2a  y faster.      *
14b30 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68  * by skipping th
14b40 65 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e  e subsequent con
14b50 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20  ditional, which 
14b60 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a  is always true..
14b70 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
14b80 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
14b90 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14ba0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
14bb0 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
14bc0 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
14bd0 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74  ped */.      got
14be0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64  o op_column_read
14bf0 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20  _header;.    }. 
14c00 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
14c10 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
14c20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
14c30 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
14c40 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
14c50 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
14c60 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c70 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
14c80 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20   pC->aType[]..  
14c90 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  */.  if( pC->nHd
14ca0 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14cb0 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
14cc0 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76  s more header av
14cd0 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73  ailable for pars
14ce0 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ing in the recor
14cf0 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f  d, try.    ** to
14d00 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f   extract additio
14d10 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68  nal fields up th
14d20 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74  rough the p2+1-t
14d30 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a  h field .    */.
14d40 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
14d50 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
14d60 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
14d70 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
14d80 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
14d90 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
14da0 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
14db0 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
14dc0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
14dd0 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
14de0 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
14df0 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
14e00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
14e10 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75  mFromBtree(pC->u
14e20 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61 4f  c.pCursor, 0, aO
14e30 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d 29  ffset[0], &sMem)
14e40 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
14e50 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
14e60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
14e70 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a  error;.        z
14e80 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d  Data = (u8*)sMem
14e90 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  .z;.      }else{
14ea0 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d  .        zData =
14eb0 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
14ec0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46   }.  .      /* F
14ed0 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65  ill in pC->aType
14ee0 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b  [i] and aOffset[
14ef0 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67  i] values throug
14f00 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c  h the p2-th fiel
14f10 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c  d. */.    op_col
14f20 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a  umn_read_header:
14f30 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e  .      i = pC->n
14f40 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20  HdrParsed;.     
14f50 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66   offset64 = aOff
14f60 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48  set[i];.      zH
14f70 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d  dr = zData + pC-
14f80 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20  >iHdrOffset;.   
14f90 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61     zEndHdr = zDa
14fa0 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b  ta + aOffset[0];
14fb0 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
14fc0 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72     if( (t = zHdr
14fd0 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20  [0])<0x80 ){.   
14fe0 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
14ff0 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36           offset6
15000 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  4 += sqlite3Vdbe
15010 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79 70  OneByteSerialTyp
15020 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
15030 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
15040 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    zHdr += sqlite
15050 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64  3GetVarint32(zHd
15060 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  r, &t);.        
15070 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
15080 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15090 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
150a0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d     }.        pC-
150b0 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b  >aType[i++] = t;
150c0 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
150d0 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73  [i] = (u32)(offs
150e0 65 74 36 34 20 26 20 30 78 66 66 66 66 66 66 66  et64 & 0xfffffff
150f0 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  f);.      }while
15100 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c  ( i<=p2 && zHdr<
15110 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20  zEndHdr );..    
15120 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
15130 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e  is corrupt if an
15140 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
15150 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20  ng are true:.   
15160 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79     ** (1) the by
15170 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  tes of the heade
15180 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74 68  r extend past th
15190 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64 65  e declared heade
151a0 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20  r size.      ** 
151b0 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20 68  (2) the entire h
151c0 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20 62  eader was used b
151d0 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20  ut not all data 
151e0 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a  was used.      *
151f0 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66  * (3) the end of
15200 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64   the data extend
15210 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64  s beyond the end
15220 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   of the record..
15230 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
15240 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
15250 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
15260 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d  dr || offset64!=
15270 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
15280 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66  ).       || (off
15290 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c  set64 > pC->payl
152a0 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
152b0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 43  {.        if( pC
152c0 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69  ->aRow==0 ) sqli
152d0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
152e0 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  e(&sMem);.      
152f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
15300 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
15310 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
15320 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
15330 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e     }..      pC->
15340 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a  nHdrParsed = i;.
15350 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66        pC->iHdrOf
15360 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64  fset = (u32)(zHd
15370 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20  r - zData);.    
15380 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
15390 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  0 ) sqlite3VdbeM
153a0 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
153b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
153c0 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a     t = 0;.    }.
153d0 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
153e0 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
153f0 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ct new entries f
15400 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
15410 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
15420 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
15430 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
15440 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
15450 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
15460 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
15470 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
15480 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
15490 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
154a0 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
154b0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
154c0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
154d0 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
154e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
154f0 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
15500 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
15510 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
15520 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
15530 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
15540 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
15550 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
15560 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
15570 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
15580 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
15590 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
155a0 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65     t = pC->aType
155b0 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  [p2];.  }..  /* 
155c0 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74  Extract the cont
155d0 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31  ent for the p2+1
155e0 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e  -th column.  Con
155f0 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  trol can only.  
15600 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ** reach this po
15610 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70  int if aOffset[p
15620 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31  2], aOffset[p2+1
15630 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  ], and pC->aType
15640 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c  [p2] are.  ** al
15650 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20  l valid..  */.  
15660 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
15670 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61  HdrParsed );.  a
15680 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
15690 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  E_OK );.  assert
156a0 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
156b0 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
156c0 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20  pDest) );.  if( 
156d0 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
156e0 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c  Dest) ){.    sql
156f0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
15700 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20  ll(pDest);.  }. 
15710 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
15720 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69  aType[p2] );.  i
15730 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
15740 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
15750 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
15760 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
15770 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
15780 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
15790 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
157a0 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
157b0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
157c0 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
157d0 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a  ow page */.    z
157e0 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20  Data = pC->aRow 
157f0 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20  + aOffset[p2];. 
15800 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20     if( t<12 ){. 
15810 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
15820 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c  SerialGet(zData,
15830 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
15840 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
15850 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  If the column va
15860 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
15870 20 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69   we need a persi
15880 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74  stent value, not
15890 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f  .      ** a MEM_
158a0 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68  Ephem value.  Th
158b0 69 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66  is branch is a f
158c0 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68  ast short-cut th
158d0 61 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  at is equivalent
158e0 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c  .      ** to cal
158f0 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  ling sqlite3Vdbe
15900 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20  SerialGet() and 
15910 73 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68  sqlite3VdbeDeeph
15920 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20  emeralize()..   
15930 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74     */.      stat
15940 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c  ic const u16 aFl
15950 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f  ag[] = { MEM_Blo
15960 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54  b, MEM_Str|MEM_T
15970 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65  erm };.      pDe
15980 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74  st->n = len = (t
15990 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44  -12)/2;.      pD
159a0 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
159b0 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ing;.      if( p
159c0 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c  Dest->szMalloc <
159d0 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20   len+2 ){.      
159e0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
159f0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
15a00 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
15a10 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c  beMemGrow(pDest,
15a20 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74   len+2, 0) ) got
15a30 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
15a40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
15a50 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d  Dest->z = pDest-
15a60 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20  >zMalloc;.      
15a70 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70  }.      memcpy(p
15a80 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20  Dest->z, zData, 
15a90 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73  len);.      pDes
15aa0 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20  t->z[len] = 0;. 
15ab0 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65       pDest->z[le
15ac0 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  n+1] = 0;.      
15ad0 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61  pDest->flags = a
15ae0 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d  Flag[t&1];.    }
15af0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44  .  }else{.    pD
15b00 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
15b10 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ing;.    /* This
15b20 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20   branch happens 
15b30 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e  only when conten
15b40 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  t is on overflow
15b50 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66   pages */.    if
15b60 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
15b70 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
15b80 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
15b90 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
15ba0 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
15bb0 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
15bc0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
15bd0 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
15be0 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
15bf0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15c00 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
15c10 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
15c20 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
15c30 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20  t for.      **  
15c40 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28    1. the typeof(
15c50 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20  ) function,.    
15c60 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c    **    2. the l
15c70 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
15c80 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
15c90 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20  , and.      **  
15ca0 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74    3. if the cont
15cb0 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65  ent length is ze
15cc0 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20  ro..      ** So 
15cd0 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c  we might as well
15ce0 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   use bogus conte
15cf0 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
15d00 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  eading.      ** 
15d10 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73  content from dis
15d20 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  k. .      **.   
15d30 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73     ** Although s
15d40 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15d50 47 65 74 28 29 20 6d 61 79 20 72 65 61 64 20 61  Get() may read a
15d60 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66  t most 8 bytes f
15d70 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  rom the.      **
15d80 20 62 75 66 66 65 72 20 70 61 73 73 65 64 20 74   buffer passed t
15d90 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20  o it, debugging 
15da0 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d  function VdbeMem
15db0 50 72 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61  PrettyPrint() ma
15dc0 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20  y.      ** read 
15dd0 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20  up to 16. So 16 
15de0 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63  bytes of bogus c
15df0 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69  ontent is suppli
15e00 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ed..      */.   
15e10 20 20 20 73 74 61 74 69 63 20 75 38 20 61 5a 65     static u8 aZe
15e20 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73  ro[16];  /* This
15e30 20 69 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f   is the bogus co
15e40 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73  ntent */.      s
15e50 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15e60 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44  Get(aZero, t, pD
15e70 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
15e80 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
15e90 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
15ea0 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
15eb0 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  or, aOffset[p2],
15ec0 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20   len, pDest);.  
15ed0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
15ee0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
15ef0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15f00 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
15f10 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e  beSerialGet((con
15f20 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c  st u8*)pDest->z,
15f30 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
15f40 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
15f50 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
15f60 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75    }.  }..op_colu
15f70 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45  mn_out:.  UPDATE
15f80 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
15f90 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
15fa0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
15fb0 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
15fc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
15fd0 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20  ffinity P1 P2 * 
15fe0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
15ff0 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40  : affinity(r[P1@
16000 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79  P2]).**.** Apply
16010 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61   affinities to a
16020 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67   range of P2 reg
16030 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20  isters starting 
16040 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50  with P1..**.** P
16050 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68  4 is a string th
16060 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
16070 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74  ers long. The nt
16080 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
16090 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
160a0 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
160b0 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
160c0 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
160d0 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65  or the nth.** me
160e0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65  mory cell in the
160f0 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20   range..*/.case 
16100 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20  OP_Affinity: {. 
16110 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66   const char *zAf
16120 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65  finity;   /* The
16130 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
16140 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61  applied */.  cha
16150 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20  r cAff;         
16160 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c        /* A singl
16170 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61  e character of a
16180 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41  ffinity */..  zA
16190 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
161a0 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  4.z;.  assert( z
161b0 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20  Affinity!=0 );. 
161c0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
161d0 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
161e0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
161f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69  [pOp->p1];.  whi
16200 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41  le( (cAff = *(zA
16210 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29  ffinity++))!=0 )
16220 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
16230 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
16240 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
16250 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
16260 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
16270 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
16280 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
16290 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69  n1, cAff, encodi
162a0 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ng);.    pIn1++;
162b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
162c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65  ./* Opcode: Make
162d0 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20  Record P1 P2 P3 
162e0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
162f0 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b  : r[P3]=mkrec(r[
16300 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f  P1@P2]).**.** Co
16310 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65  nvert P2 registe
16320 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  rs beginning wit
16330 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72  h P1 into the [r
16340 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a  ecord format].**
16350 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72   use as a data r
16360 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62  ecord in a datab
16370 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20  ase table or as 
16380 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69  a key.** in an i
16390 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f  ndex.  The OP_Co
163a0 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20  lumn opcode can 
163b0 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72  decode the recor
163c0 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50  d later..**.** P
163d0 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e  4 may be a strin
163e0 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
163f0 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54  racters long.  T
16400 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
16410 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
16420 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
16430 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
16440 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
16450 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
16460 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
16470 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
16480 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
16490 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
164a0 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
164b0 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
164c0 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
164d0 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
164e0 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
164f0 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
16500 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
16510 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
16520 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20  y BLOB..*/.case 
16530 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
16540 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72  .  u8 *zNewRecor
16550 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  d;        /* A b
16560 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68  uffer to hold th
16570 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e  e data for the n
16580 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  ew record */.  M
16590 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20  em *pRec;       
165a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
165b0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34   record */.  u64
165c0 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20 20   nData;         
165d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
165e0 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
165f0 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
16600 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
16610 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16620 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
16630 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ace */.  i64 nBy
16640 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
16650 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72 65  /* Data space re
16660 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
16670 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20  record */.  i64 
16680 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20  nZero;          
16690 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
166a0 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68  zero bytes at th
166b0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
166c0 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61  ord */.  int nVa
166d0 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  rint;           
166e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
166f0 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a  es in a varint *
16700 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74  /.  u32 serial_t
16710 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79  ype;       /* Ty
16720 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65  pe field */.  Me
16730 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20  m *pData0;      
16740 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69       /* First fi
16750 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e  eld to be combin
16760 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f  ed into the reco
16770 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61  rd */.  Mem *pLa
16780 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  st;            /
16790 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20  * Last field of 
167a0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
167b0 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
167c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
167d0 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
167e0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68  e record */.  ch
167f0 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20  ar *zAffinity;  
16800 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
16810 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20  nity string for 
16820 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16830 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  int file_format;
16840 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66         /* File f
16850 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72  ormat to use for
16860 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
16870 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
16880 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75        /* Space u
16890 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72  sed in zNewRecor
168a0 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  d[] header */.  
168b0 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
168c0 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
168d0 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
168e0 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  rd[] content */.
168f0 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20    u32 len;      
16900 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
16910 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
16920 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20  ..  /* Assuming 
16930 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  the record conta
16940 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68  ins N fields, th
16950 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
16960 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20  looks.  ** like 
16970 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20  this:.  **.  ** 
16980 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16990 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
169a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
169b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
169c0 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20  --------.  ** | 
169d0 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20  hdr-size | type 
169e0 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e  0 | type 1 | ...
169f0 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61   | type N-1 | da
16a00 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61  ta0 | ... | data
16a10 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d   N-1 | .  ** ---
16a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16a30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16a40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16a50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16a60 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  -----.  **.  ** 
16a70 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e  Data(0) is taken
16a80 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
16a90 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65  1.  Data(1) come
16aa0 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  s from register 
16ab0 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f  P1+1.  ** and so
16ac0 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a   forth..  **.  *
16ad0 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c  * Each type fiel
16ae0 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65  d is a varint re
16af0 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73  presenting the s
16b00 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68  erial type of th
16b10 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f  e .  ** correspo
16b20 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65  nding data eleme
16b30 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56  nt (see sqlite3V
16b40 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29  dbeSerialType())
16b50 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73  . The.  ** hdr-s
16b60 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73  ize field is als
16b70 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68  o a varint which
16b80 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66   is the offset f
16b90 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
16ba0 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65  g.  ** of the re
16bb0 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20  cord to data0.. 
16bc0 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b   */.  nData = 0;
16bd0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16be0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
16bf0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  ata space */.  n
16c00 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Hdr = 0;        
16c10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16c20 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
16c30 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20  pace */.  nZero 
16c40 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
16c50 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
16c60 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
16c70 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
16c80 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d  .  nField = pOp-
16c90 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79  >p1;.  zAffinity
16ca0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
16cb0 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30  assert( nField>0
16cc0 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26   && pOp->p2>0 &&
16cd0 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c   pOp->p2+nField<
16ce0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
16cf0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
16d00 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b   pData0 = &aMem[
16d10 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c  nField];.  nFiel
16d20 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  d = pOp->p2;.  p
16d30 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e  Last = &pData0[n
16d40 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65  Field-1];.  file
16d50 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e  _format = p->min
16d60 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b  WriteFileFormat;
16d70 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20  ..  /* Identify 
16d80 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
16d90 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ter */.  assert(
16da0 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31   pOp->p3<pOp->p1
16db0 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
16dc0 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a  ->p1+pOp->p2 );.
16dd0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
16de0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
16df0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
16e00 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c  Out);..  /* Appl
16e10 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  y the requested 
16e20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20  affinity to all 
16e30 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73  inputs.  */.  as
16e40 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c  sert( pData0<=pL
16e50 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66  ast );.  if( zAf
16e60 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52  finity ){.    pR
16e70 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20  ec = pData0;.   
16e80 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79   do{.      apply
16e90 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c  Affinity(pRec++,
16ea0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c   *(zAffinity++),
16eb0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
16ec0 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
16ed0 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65  ity[0]==0 || pRe
16ee0 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20  c<=pLast );.    
16ef0 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
16f00 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66  y[0] );.  }..#if
16f10 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
16f20 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a  E_NULL_TRIM.  /*
16f30 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61   NULLs can be sa
16f40 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f  fely trimmed fro
16f50 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  m the end of the
16f60 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67   record, as long
16f70 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20   as.  ** as the 
16f80 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73  schema format is
16f90 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e   2 or more and n
16fa0 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74  one of the omitt
16fb0 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20  ed columns.  ** 
16fc0 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  have a non-NULL 
16fd0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20  default value.  
16fe0 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64  Also, the record
16ff0 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77 69   must be left wi
17000 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74  th.  ** at least
17010 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20   one field.  If 
17020 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c  P5>0 then it wil
17030 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68  l be one more th
17040 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65  an the.  ** inde
17050 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d  x of the right-m
17060 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  ost column with 
17070 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75  a non-NULL defau
17080 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66  lt value */.  if
17090 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
170a0 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e   while( (pLast->
170b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
170c0 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70  )!=0 && nField>p
170d0 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
170e0 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e  pLast--;.      n
170f0 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20  Field--;.    }. 
17100 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
17110 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65  Loop through the
17120 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77   elements that w
17130 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20  ill make up the 
17140 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65  record to figure
17150 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75  .  ** out how mu
17160 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75  ch space is requ
17170 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77  ired for the new
17180 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20   record..  */.  
17190 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20  pRec = pLast;.  
171a0 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  do{.    assert( 
171b0 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29  memIsValid(pRec)
171c0 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75 54   );.    pRec->uT
171d0 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79 70  emp = serial_typ
171e0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
171f0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
17200 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65  file_format, &le
17210 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  n);.    if( pRec
17220 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
17230 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ro ){.      if( 
17240 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20  nData ){.       
17250 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17260 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52  MemExpandBlob(pR
17270 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ec) ) goto no_me
17280 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  m;.      }else{.
17290 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d          nZero +=
172a0 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
172b0 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70          len -= p
172c0 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
172d0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
172e0 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20  nData += len;.  
172f0 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
17300 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a  al_type==127 );.
17310 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65      testcase( se
17320 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29  rial_type==128 )
17330 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65  ;.    nHdr += se
17340 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f  rial_type<=127 ?
17350 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69   1 : sqlite3Vari
17360 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  ntLen(serial_typ
17370 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  e);.    if( pRec
17380 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65 61 6b  ==pData0 ) break
17390 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20  ;.    pRec--;.  
173a0 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a  }while(1);..  /*
173b0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
173c0 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20  22564-11647 The 
173d0 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69  header begins wi
173e0 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69  th a single vari
173f0 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65  nt.  ** which de
17400 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
17410 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
17420 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
17430 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a  . The varint.  *
17440 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73  * value is the s
17450 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  ize of the heade
17460 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75  r in bytes inclu
17470 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61  ding the size va
17480 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66  rint.  ** itself
17490 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28  . */.  testcase(
174a0 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20   nHdr==126 );.  
174b0 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
174c0 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64  127 );.  if( nHd
174d0 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a  r<=126 ){.    /*
174e0 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
174f0 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   */.    nHdr += 
17500 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
17510 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20  /* Rare case of 
17520 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68  a really large h
17530 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61  eader */.    nVa
17540 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
17550 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
17560 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69     nHdr += nVari
17570 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72  nt;.    if( nVar
17580 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
17590 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64  tLen(nHdr) ) nHd
175a0 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
175b0 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20   = nHdr+nData;. 
175c0 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f   if( nByte+nZero
175d0 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
175e0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
175f0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
17600 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
17610 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
17620 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
17630 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
17640 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
17650 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
17660 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
17670 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
17680 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
17690 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
176a0 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
176b0 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
176c0 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
176d0 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
176e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
176f0 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75  rAndResize() cou
17700 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
17710 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
17720 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
17730 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
17740 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
17750 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
17760 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  e) ){.    goto n
17770 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
17780 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
17790 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
177a0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
177b0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
177c0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
177d0 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48   nHdr);.  j = nH
177e0 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  dr;.  assert( pD
177f0 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
17800 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
17810 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c    do{.    serial
17820 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54  _type = pRec->uT
17830 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44  emp;.    /* EVID
17840 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39  ENCE-OF: R-06529
17850 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67  -47362 Following
17860 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
17870 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   are one or more
17880 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e  .    ** addition
17890 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20  al varints, one 
178a0 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  per column. */. 
178b0 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
178c0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
178d0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
178e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
178f0 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
17900 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
17910 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38  F: R-64536-51728
17920 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20   The values for 
17930 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
17940 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a  he record.    **
17950 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
17960 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20  low the header. 
17970 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69  */.    j += sqli
17980 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74  te3VdbeSerialPut
17990 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c  (&zNewRecord[j],
179a0 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79   pRec, serial_ty
179b0 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20  pe); /* content 
179c0 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b  */.  }while( (++
179d0 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a  pRec)<=pLast );.
179e0 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64    assert( i==nHd
179f0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a  r );.  assert( j
17a00 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73  ==nByte );..  as
17a10 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
17a20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
17a30 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
17a40 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  sor) );.  pOut->
17a50 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
17a60 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
17a70 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20  MEM_Blob;.  if( 
17a80 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
17a90 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
17aa0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
17ab0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
17ac0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  .  }.  pOut->enc
17ad0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20   = SQLITE_UTF8; 
17ae0 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20   /* In case the 
17af0 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e  blob is ever con
17b00 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a  verted to text *
17b10 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  /.  REGISTER_TRA
17b20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74  CE(pOp->p3, pOut
17b30 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
17b40 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
17b50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
17b60 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
17b70 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
17b80 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e  psis: r[P2]=coun
17b90 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  t().**.** Store 
17ba0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  the number of en
17bb0 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65  tries (an intege
17bc0 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20  r value) in the 
17bd0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a  table or index .
17be0 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ** opened by cur
17bf0 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74  sor P1 in regist
17c00 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66  er P2.*/.#ifndef
17c10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
17c20 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f  EECOUNT.case OP_
17c30 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Count: {        
17c40 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36   /* out2 */.  i6
17c50 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75  4 nEntry;.  BtCu
17c60 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20  rsor *pCrsr;..  
17c70 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
17c80 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54  [pOp->p1]->eCurT
17c90 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
17ca0 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
17cb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
17cc0 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  ]->uc.pCursor;. 
17cd0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
17ce0 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20  ;.  nEntry = 0; 
17cf0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
17d00 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
17d10 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
17d20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
17d30 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
17d40 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
17d50 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
17d60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
17d70 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
17d80 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
17d90 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
17da0 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b   nEntry;.  break
17db0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
17dc0 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74  pcode: Savepoint
17dd0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
17de0 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65  ** Open, release
17df0 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   or rollback the
17e00 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64   savepoint named
17e10 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34   by parameter P4
17e20 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f  , depending.** o
17e30 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
17e40 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77  1. To open a new
17e50 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
17e60 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63  0. To release (c
17e70 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69  ommit) an.** exi
17e80 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c  sting savepoint,
17e90 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f   P1==1, or to ro
17ea0 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69  llback an existi
17eb0 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d  ng savepoint P1=
17ec0 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  =2..*/.case OP_S
17ed0 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e  avepoint: {.  in
17ee0 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20 20  t p1;           
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17f00 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65   Value of P1 ope
17f10 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rand */.  char *
17f20 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
17f30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
17f40 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a  e of savepoint *
17f50 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20  /.  int nName;. 
17f60 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77   Savepoint *pNew
17f70 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
17f80 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76  Savepoint;.  Sav
17f90 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20  epoint *pTmp;.  
17fa0 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a  int iSavepoint;.
17fb0 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20    int ii;..  p1 
17fc0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61  = pOp->p1;.  zNa
17fd0 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  me = pOp->p4.z;.
17fe0 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  .  /* Assert tha
17ff0 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65 74  t the p1 paramet
18000 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73  er is valid. Als
18010 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65 20  o that if there 
18020 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20  is no open.  ** 
18030 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
18040 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62  n there cannot b
18050 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73  e any savepoints
18060 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  . .  */.  assert
18070 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
18080 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43  ==0 || db->autoC
18090 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
180a0 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f  sert( p1==SAVEPO
180b0 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53  INT_BEGIN||p1==S
180c0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
180d0 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
180e0 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73  ROLLBACK );.  as
180f0 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
18100 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72  oint || db->isTr
18110 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
18120 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  nt==0 );.  asser
18130 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  t( checkSavepoin
18140 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20  tCount(db) );.  
18150 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
18160 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70  ader );..  if( p
18170 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
18180 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62  IN ){.    if( db
18190 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
181a0 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77  {.      /* A new
181b0 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f   savepoint canno
181c0 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66 20  t be created if 
181d0 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
181e0 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a   write .      **
181f0 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65   statements (i.e
18200 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74  . open read/writ
18210 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c  e incremental bl
18220 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20  ob handles)..   
18230 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
18240 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
18250 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
18260 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61  epoint - SQL sta
18270 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
18280 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
18290 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
182a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
182b0 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53  nName = sqlite3S
182c0 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a  trlen30(zName);.
182d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
182e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
182f0 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20  E.      /* This 
18300 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20  call is Ok even 
18310 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e  if this savepoin
18320 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20  t is actually a 
18330 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20  transaction.    
18340 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28    ** savepoint (
18350 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68  and therefore sh
18360 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20  ould not prompt 
18370 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61  xSavepoint()) ca
18380 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a  llbacks..      *
18390 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74  * If this is a t
183a0 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
183b0 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65  oint being opene
183c0 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  d, it is guarant
183d0 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61  eed.      ** tha
183e0 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e  t the db->aVTran
183f0 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70  s[] array is emp
18400 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73  ty.  */.      as
18410 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f  sert( db->autoCo
18420 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
18430 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20  VTrans==0 );.   
18440 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
18450 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
18460 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
18470 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
184a0 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29  +db->nSavepoint)
184b0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
184c0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
184d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
184e0 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ror;.#endif..   
184f0 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e     /* Create a n
18500 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72  ew savepoint str
18510 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20  ucture. */.     
18520 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44   pNew = sqlite3D
18530 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c  bMallocRawNN(db,
18540 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e   sizeof(Savepoin
18550 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  t)+nName+1);.   
18560 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20     if( pNew ){. 
18570 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61         pNew->zNa
18580 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e  me = (char *)&pN
18590 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ew[1];.        m
185a0 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d  emcpy(pNew->zNam
185b0 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b  e, zName, nName+
185c0 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20  1);.    .       
185d0 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
185e0 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  no open transact
185f0 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74  ion, then mark t
18600 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61 6c  his as a special
18610 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61  .        ** "tra
18620 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
18630 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  nt". */.        
18640 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
18650 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
18660 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18670 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62   0;.          db
18680 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
18690 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20  avepoint = 1;.  
186a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
186b0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
186c0 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20  point++;.       
186d0 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c   }..        /* L
186e0 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65  ink the new save
186f0 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64  point into the d
18700 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73  atabase handle's
18710 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20   list. */.      
18720 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20    pNew->pNext = 
18730 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
18740 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
18750 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20  epoint = pNew;. 
18760 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
18770 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d  ferredCons = db-
18780 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
18790 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
187a0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
187b0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
187c0 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20  mCons;.      }. 
187d0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
187e0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
187f0 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
18800 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
18810 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
18820 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
18830 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
18840 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
18850 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
18860 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
18870 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
18880 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
18890 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
188a0 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
188b0 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
188c0 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
188d0 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
188e0 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
188f0 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
18900 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
18910 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
18920 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
18930 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
18940 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75  eError(p, "no su
18950 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73  ch savepoint: %s
18960 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  ", zName);.     
18970 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
18980 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  OR;.    }else if
18990 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
189a0 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  >0 && p1==SAVEPO
189b0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
189c0 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
189d0 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
189e0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
189f0 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
18a00 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
18a10 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
18a20 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20  tatements..     
18a30 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
18a40 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
18a50 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61  annot release sa
18a60 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20  vepoint - ".    
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a80 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
18a90 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
18aa0 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
18ab0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
18ac0 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f   }else{..      /
18ad0 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
18ae0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20  her or not this 
18af0 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
18b00 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73   savepoint. If s
18b10 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  o,.      ** and 
18b20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
18b30 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20  E command, then 
18b40 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
18b50 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a  saction .      *
18b60 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20  * is committed. 
18b70 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
18b80 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f  int isTransactio
18b90 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  n = pSavepoint->
18ba0 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e  pNext==0 && db->
18bb0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
18bc0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 61 73  epoint;.      as
18bd0 73 65 72 74 28 20 64 62 2d 3e 62 43 6f 6e 63 75  sert( db->bConcu
18be0 72 72 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  rrent==0 || db->
18bf0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
18c00 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  epoint==0 );.   
18c10 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
18c20 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
18c30 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
18c40 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
18c50 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
18c60 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
18c70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
18c80 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18c90 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
18ca0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
18cb0 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
18cc0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
18cd0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
18ce0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
18cf0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
18d00 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
18d10 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
18d20 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
18d30 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
18d40 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18d50 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
18d60 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18d70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18d80 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
18d90 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
18da0 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
18db0 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
18dc0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53  .        int isS
18dd0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
18de0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
18df0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
18e00 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
18e10 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
18e20 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
18e30 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
18e40 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
18e50 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  e = (db->flags &
18e60 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
18e70 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20  anges)!=0;.     
18e80 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
18e90 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
18ea0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  {.            rc
18eb0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54   = sqlite3BtreeT
18ec0 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
18ed0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20  ->aDb[ii].pBt,. 
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f        SQLITE_ABO
18f10 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20  RT_ROLLBACK,.   
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
18f50 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  ge==0);.        
18f60 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
18f70 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
18f80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18f90 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
18fa0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
18fb0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
18fc0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  ange = 0;.      
18fd0 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
18fe0 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
18ff0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
19000 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
19010 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
19020 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
19030 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
19040 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
19050 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
19060 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
19070 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
19080 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
19090 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
190a0 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68    if( isSchemaCh
190b0 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ange ){.        
190c0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
190d0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
190e0 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
190f0 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
19100 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
19110 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20  ion(db);.       
19120 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28     db->flags = (
19130 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49  db->flags | SQLI
19140 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
19150 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
19160 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
19170 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
19180 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
19190 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c   RELEASE or ROLL
191a0 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c  BACK, destroy al
191b0 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  l .      ** save
191c0 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e  points nested in
191d0 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65  side of the save
191e0 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
191f0 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ated on. */.    
19200 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
19210 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f  vepoint!=pSavepo
19220 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  int ){.        p
19230 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  Tmp = db->pSavep
19240 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
19250 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
19260 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Tmp->pNext;.    
19270 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
19280 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20  e(db, pTmp);.   
19290 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
192a0 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a  int--;.      }..
192b0 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69        /* If it i
192c0 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65  s a RELEASE, the
192d0 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61  n destroy the sa
192e0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
192f0 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20  erated on .     
19300 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69   ** too. If it i
19310 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c  s a ROLLBACK TO,
19320 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75   then set the nu
19330 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
19340 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74   .      ** const
19350 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
19360 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
19370 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
19380 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20  value stored.   
19390 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73     ** when the s
193a0 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65  avepoint was cre
193b0 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20  ated.  */.      
193c0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
193d0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
193e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
193f0 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
19400 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
19410 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
19420 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
19430 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
19440 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
19450 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
19460 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
19470 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
19480 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
19490 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
194a0 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
194b0 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
194c0 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65  rredCons = pSave
194d0 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
194e0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62  Cons;.        db
194f0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
19500 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
19510 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
19520 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  s;.      }..    
19530 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
19540 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45  tion || p1==SAVE
19550 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
19560 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
19570 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
19580 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76  int(db, p1, iSav
19590 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
195a0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
195b0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
195c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
195d0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
195e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
195f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
19600 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  or;..  break;.}.
19610 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
19620 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 50 33 20  Commit P1 P2 P3 
19630 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
19640 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
19650 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
19660 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
19670 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
19680 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
19690 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
196a0 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
196b0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
196c0 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
196d0 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
196e0 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
196f0 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
19700 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
19710 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
19720 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
19730 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
19740 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
19750 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ache..**.** If P
19760 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
19770 68 65 6e 20 74 68 69 73 20 69 6e 73 74 72 75 63  hen this instruc
19780 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
19790 65 63 75 74 65 64 20 61 73 20 70 61 72 74 20 6f  ecuted as part o
197a0 66 0a 2a 2a 20 61 20 22 42 45 47 49 4e 20 43 4f  f.** a "BEGIN CO
197b0 4e 43 55 52 52 45 4e 54 22 20 63 6f 6d 6d 61 6e  NCURRENT" comman
197c0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
197d0 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
197e0 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
197f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
19800 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
19810 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19820 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
19830 63 6b 3b 0a 20 20 69 6e 74 20 62 43 6f 6e 63 75  ck;.  int bConcu
19840 72 72 65 6e 74 3b 0a 20 20 69 6e 74 20 68 72 63  rrent;.  int hrc
19850 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
19860 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
19870 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
19880 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 43 6f 6e 63  pOp->p2;.  bConc
19890 75 72 72 65 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  urrent = pOp->p3
198a0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
198b0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
198c0 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43   || desiredAutoC
198d0 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
198e0 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
198f0 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52  oCommit==1 || iR
19900 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20  ollback==0 );.  
19910 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
19920 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
19930 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d 30 20 29  bConcurrent==0 )
19940 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
19950 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
19960 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74   db->bConcurrent
19970 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
19980 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
19990 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
199a0 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
199b0 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
199c0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
199d0 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73  er );..  if( des
199e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
199f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
19a00 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
19a10 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
19a20 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
19a30 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
19a40 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
19a50 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
19a60 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
19a70 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
19a80 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
19a90 20 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e    db->bConcurren
19aa0 74 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 0;.    }else
19ab0 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
19ac0 43 6f 6d 6d 69 74 0a 20 20 20 20 20 20 20 20 20  Commit.         
19ad0 20 20 20 26 26 20 28 64 62 2d 3e 6e 56 64 62 65     && (db->nVdbe
19ae0 57 72 69 74 65 3e 30 20 7c 7c 20 28 64 62 2d 3e  Write>0 || (db->
19af0 62 43 6f 6e 63 75 72 72 65 6e 74 20 26 26 20 64  bConcurrent && d
19b00 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31  b->nVdbeActive>1
19b10 29 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  )) ){.      /* A
19b20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
19b30 20 6f 6e 6c 79 20 62 65 20 63 6f 6d 6d 69 74 74   only be committ
19b40 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
19b50 6e 6f 20 6f 74 68 65 72 20 61 63 74 69 76 65 0a  no other active.
19b60 20 20 20 20 20 20 2a 2a 20 77 72 69 74 65 72 20        ** writer 
19b70 56 4d 73 2e 20 49 66 20 74 68 65 20 74 72 61 6e  VMs. If the tran
19b80 73 61 63 74 69 6f 6e 20 69 73 20 43 4f 4e 43 55  saction is CONCU
19b90 52 52 45 4e 54 2c 20 74 68 65 6e 20 69 74 20 6d  RRENT, then it m
19ba0 61 79 20 6f 6e 6c 79 20 62 65 0a 20 20 20 20 20  ay only be.     
19bb0 20 2a 2a 20 63 6f 6d 6d 69 74 74 65 64 20 69 66   ** committed if
19bc0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 61 63   there are no ac
19bd0 74 69 76 65 20 56 4d 73 20 61 74 20 61 6c 6c 20  tive VMs at all 
19be0 28 72 65 61 64 65 72 73 20 6f 72 20 77 72 69 74  (readers or writ
19bf0 65 72 73 29 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  ers)..      **. 
19c00 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20       ** If this 
19c10 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
19c20 20 43 4f 4d 4d 49 54 20 61 6e 64 20 74 68 65 20   COMMIT and the 
19c30 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
19c40 6e 6f 74 20 62 65 0a 20 20 20 20 20 20 2a 2a 20  not be.      ** 
19c50 63 6f 6d 6d 69 74 74 65 64 20 64 75 65 20 74 6f  committed due to
19c60 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6e 64   one of the cond
19c70 69 74 69 6f 6e 73 20 61 62 6f 76 65 2c 20 72 65  itions above, re
19c80 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 0a 20 20  turn an error.  
19c90 20 20 20 20 2a 2a 20 69 6e 64 69 63 61 74 69 6e      ** indicatin
19ca0 67 20 74 68 61 74 20 6f 74 68 65 72 20 56 4d 73  g that other VMs
19cb0 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 62   must complete b
19cc0 65 66 6f 72 65 20 74 68 65 20 43 4f 4d 4d 49 54  efore the COMMIT
19cd0 20 63 61 6e 20 0a 20 20 20 20 20 20 2a 2a 20 62   can .      ** b
19ce0 65 20 70 72 6f 63 65 73 73 65 64 2e 20 20 2a 2f  e processed.  */
19cf0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
19d00 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
19d10 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61  ot commit transa
19d20 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
19d50 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
19d60 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
19d70 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
19d80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19d90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
19da0 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
19db0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
19dc0 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
19dd0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
19de0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19df0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
19e00 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
19e10 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
19e20 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  ommit;.    }.   
19e30 20 68 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   hrc = sqlite3Vd
19e40 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 20 20 69  beHalt(p);.    i
19e50 66 28 20 28 68 72 63 20 26 20 30 78 46 46 29 3d  f( (hrc & 0xFF)=
19e60 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
19e70 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
19e80 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
19e90 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
19ea0 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65  mmit = (u8)(1-de
19eb0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
19ec0 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
19ed0 68 72 63 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  hrc;.      rc = 
19ee0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
19ef0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
19f00 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  urn;.    }.    d
19f10 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20 3d  b->bConcurrent =
19f20 20 28 75 38 29 62 43 6f 6e 63 75 72 72 65 6e 74   (u8)bConcurrent
19f30 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  ;.    assert( db
19f40 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->nStatement==0 
19f50 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c  );.    sqlite3Cl
19f60 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62  oseSavepoints(db
19f70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63  );.    if( p->rc
19f80 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19f90 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19fa0 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _DONE;.    }else
19fb0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
19fc0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
19fd0 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  .    goto vdbe_r
19fe0 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  eturn;.  }else{.
19ff0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
1a000 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20  rror(p,.        
1a010 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
1a020 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
1a030 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
1a040 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
1a050 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
1a060 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
1a070 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
1a080 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1a090 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
1a0b0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
1a0c0 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
1a0d0 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
1a0e0 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
1a0f0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
1a100 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a110 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
1a120 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1a130 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e  ode: Transaction
1a140 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1a150 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
1a160 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74  ansaction on dat
1a170 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72  abase P1 if a tr
1a180 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
1a190 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69   already.** acti
1a1a0 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  ve..** If P2 is 
1a1b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
1a1c0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
1a1d0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f  on is started, o
1a1e0 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d  r if a .** read-
1a1f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
1a200 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69  lready active, i
1a210 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f  t is upgraded to
1a220 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
1a230 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tion..** If P2 i
1a240 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72  s zero, then a r
1a250 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
1a260 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a  is started..**.*
1a270 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
1a280 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
1a290 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
1a2a0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
1a2b0 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
1a2c0 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
1a2d0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1a2e0 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
1a2f0 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
1a300 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
1a310 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
1a320 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
1a330 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
1a340 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1a350 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69  ..**.** If a wri
1a360 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
1a370 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68  s started and th
1a380 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a  e Vdbe.usesStmtJ
1a390 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a  ournal flag is.*
1a3a0 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61  * true (this fla
1a3b0 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  g is set if the 
1a3c0 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20  Vdbe may modify 
1a3d0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
1a3e0 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72  w and may.** thr
1a3f0 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1a400 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d  ption), a statem
1a410 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
1a420 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e  may also be open
1a430 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63  ed..** More spec
1a440 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74  ifically, a stat
1a450 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1a460 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20  n is opened iff 
1a470 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
1a480 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
1a490 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61  rrently not in a
1a4a0 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20  utocommit mode, 
1a4b0 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
1a4c0 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20  other.** active 
1a4d0 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74  statements. A st
1a4e0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1a4f0 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63  ion allows the c
1a500 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74  hanges made by t
1a510 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62  his.** VDBE to b
1a520 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
1a530 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
1a540 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
1a550 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
1a560 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
1a570 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20  on. If no error 
1a580 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20  is encountered, 
1a590 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
1a5a0 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c  ansaction.** wil
1a5b0 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
1a5c0 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
1a5d0 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
1a5e0 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
1a5f0 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f  this opcode also
1a600 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65   checks the sche
1a610 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73  ma cookie agains
1a620 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20  t P3.** and the 
1a630 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
1a640 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73  n counter agains
1a650 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f  t P4..** The coo
1a660 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
1a670 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
1a680 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1a690 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
1a6a0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
1a6b0 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
1a6c0 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
1a6d0 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
1a6e0 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
1a6f0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
1a700 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
1a710 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66   the schema.  If
1a720 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63   the schema.** c
1a730 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66  ookie in P3 diff
1a740 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68  ers from the sch
1a750 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68  ema cookie in th
1a760 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
1a770 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73  r or.** if the s
1a780 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
1a790 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64   counter in P4 d
1a7a0 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
1a7b0 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72  current.** gener
1a7c0 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74  ation counter, t
1a7d0 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43  hen an SQLITE_SC
1a7e0 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61  HEMA error is ra
1a7f0 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69  ised and executi
1a800 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68  on.** halts.  Th
1a810 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
1a820 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f   wrapper functio
1a830 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70  n might then rep
1a840 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74  repare the.** st
1a850 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75  atement and reru
1a860 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65  n it from the be
1a870 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65  ginning..*/.case
1a880 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
1a890 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
1a8a0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1a8b0 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73  int iGen;..  ass
1a8c0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1a8d0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1a8e0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c  ->readOnly==0 ||
1a8f0 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
1a900 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1a910 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1a920 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1a930 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1a940 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1a950 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70  ->p1) );.  if( p
1a960 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66  Op->p2 && (db->f
1a970 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75  lags & SQLITE_Qu
1a980 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20  eryOnly)!=0 ){. 
1a990 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
1a9a0 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74  EADONLY;.    got
1a9b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a9c0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20  rror;.  }.  pBt 
1a9d0 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
1a9e0 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
1a9f0 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
1aa00 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1aa10 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
1aa20 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  p2);.    testcas
1aa30 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  e( rc==SQLITE_BU
1aa40 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20  SY_SNAPSHOT );. 
1aa50 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d     testcase( rc=
1aa60 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43  =SQLITE_BUSY_REC
1aa70 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66 28  OVERY );.    if(
1aa80 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1aa90 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26  {.      if( (rc&
1aaa0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55  0xff)==SQLITE_BU
1aab0 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
1aac0 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
1aad0 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20  - aOp);.        
1aae0 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  p->rc = rc;.    
1aaf0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1ab00 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
1ab10 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1ab20 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1ab30 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
1ab40 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
1ab50 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
1ab60 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
1ab70 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
1ab80 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
1ab90 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1aba0 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
1abb0 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
1abc0 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
1abd0 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
1abe0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
1abf0 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
1ac00 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
1ac10 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
1ac20 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
1ac30 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
1ac40 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
1ac50 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
1ac60 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
1ac70 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
1ac80 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
1ac90 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
1aca0 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
1acb0 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
1acc0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1acd0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
1ace0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1acf0 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
1ad00 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
1ad10 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
1ad20 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
1ad30 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
1ad40 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
1ad50 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
1ad60 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
1ad70 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
1ad80 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1ad90 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
1ada0 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
1adb0 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
1adc0 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
1add0 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
1ade0 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
1adf0 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
1ae00 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1ae10 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
1ae20 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
1ae30 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
1ae40 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
1ae50 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
1ae60 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
1ae70 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
1ae80 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c  ing:.    ** IMPL
1ae90 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
1aea0 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73 20  -03189-51135 As 
1aeb0 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65  each SQL stateme
1aec0 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63 68  nt runs, the sch
1aed0 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73 69  ema.    ** versi
1aee0 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f  on is checked to
1aef0 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
1af00 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74 20   schema has not 
1af10 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74 68  changed since th
1af20 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74 61  e.    ** SQL sta
1af30 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70 61  tement was prepa
1af40 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  red..    */.    
1af50 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
1af60 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
1af70 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
1af80 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
1af90 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44     iGen = db->aD
1afa0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
1afb0 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b  ma->iGeneration;
1afc0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47  .  }else{.    iG
1afd0 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a  en = iMeta = 0;.
1afe0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1aff0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1b000 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1b010 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  2 );.  if( pOp->
1b020 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f  p5 && (iMeta!=pO
1b030 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70  p->p3 || iGen!=p
1b040 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20  Op->p4.i) ){.   
1b050 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1b060 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
1b070 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
1b080 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
1b090 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
1b0a0 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
1b0b0 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
1b0c0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
1b0d0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
1b0e0 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
1b0f0 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
1b100 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
1b110 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
1b120 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
1b130 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
1b140 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
1b150 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
1b160 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1b170 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
1b180 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
1b190 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
1b1a0 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
1b1b0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
1b1c0 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
1b1d0 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
1b1e0 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
1b1f0 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
1b200 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
1b210 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
1b220 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
1b230 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
1b240 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
1b250 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
1b260 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
1b270 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
1b280 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
1b290 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
1b2a0 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
1b2b0 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
1b2c0 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
1b2d0 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
1b2e0 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
1b2f0 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
1b300 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
1b310 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
1b320 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
1b330 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
1b340 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
1b350 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
1b360 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
1b370 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
1b380 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
1b390 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
1b3a0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
1b3b0 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1b3c0 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
1b3d0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
1b3e0 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  neSchema(db, pOp
1b3f0 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ->p1);.    }.   
1b400 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
1b410 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1b420 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69  _SCHEMA;.  }.  i
1b430 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1b440 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1b450 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1b460 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
1b470 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1b480 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
1b490 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
1b4a0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
1b4b0 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
1b4c0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
1b4d0 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
1b4e0 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
1b4f0 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1b500 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
1b510 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1b520 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1b530 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
1b540 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1b550 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1b560 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1b570 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
1b580 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
1b590 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
1b5a0 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
1b5b0 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
1b5c0 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
1b5d0 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
1b5e0 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
1b5f0 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
1b600 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
1b610 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
1b620 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
1b630 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1b640 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
1b650 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
1b660 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
1b670 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
1b680 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
1b690 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
1b6a0 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
1b6b0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1b6c0 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
1b6d0 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
1b6e0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1b6f0 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
1b700 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1b710 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1b720 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1b730 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1b740 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
1b750 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1b760 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1b770 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a  eMask, iDb) );..
1b780 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1b790 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
1b7a0 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
1b7b0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1b7c0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
1b7d0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
1b7e0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1b7f0 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
1b800 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1b810 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
1b820 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
1b830 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
1b840 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69  ue P3 into cooki
1b850 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
1b860 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50  atabase P1..** P
1b870 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  2==1 is the sche
1b880 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d  ma version.  P2=
1b890 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1b8a0 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32  se format..** P2
1b8b0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1b8c0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1b8d0 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64  he .** size, and
1b8e0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
1b8f0 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
1b900 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1b910 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a  P1==1 is the .**
1b920 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1b930 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
1b940 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1b950 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69  *.** A transacti
1b960 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
1b970 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  ed before execut
1b980 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
1b990 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43  .*/.case OP_SetC
1b9a0 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70  ookie: {.  Db *p
1b9b0 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
1b9c0 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p2<SQLITE_N_B
1b9d0 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
1b9e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b9f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
1ba00 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1ba10 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1ba20 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
1ba30 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
1ba40 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1ba50 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1ba60 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
1ba70 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
1ba80 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1ba90 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1baa0 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d  texHeld(db, pOp-
1bab0 3e 70 31 2c 20 30 29 20 29 3b 0a 23 69 66 6e 64  >p1, 0) );.#ifnd
1bac0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
1bad0 4f 4e 43 55 52 52 45 4e 54 0a 20 20 69 66 28 20  ONCURRENT.  if( 
1bae0 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20  db->bConcurrent 
1baf0 0a 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 32 3d  .   && (pOp->p2=
1bb00 3d 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53  =BTREE_USER_VERS
1bb10 49 4f 4e 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d  ION || pOp->p2==
1bb20 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49 4f  BTREE_APPLICATIO
1bb30 4e 5f 49 44 29 0a 20 20 29 7b 0a 20 20 20 20 72  N_ID).  ){.    r
1bb40 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1bb50 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1bb60 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
1bb70 74 20 6d 6f 64 69 66 79 20 25 73 20 77 69 74 68  t modify %s with
1bb80 69 6e 20 43 4f 4e 43 55 52 52 45 4e 54 20 74 72  in CONCURRENT tr
1bb90 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
1bba0 20 20 20 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52      pOp->p2==BTR
1bbb0 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e 20  EE_USER_VERSION 
1bbc0 3f 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  ? "user_version"
1bbd0 20 3a 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 5f   : "application_
1bbe0 69 64 22 0a 20 20 20 20 29 3b 0a 20 20 20 20 67  id".    );.    g
1bbf0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1bc00 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64  _error;.  }.#end
1bc10 69 66 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  if.  /* See note
1bc20 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
1bc30 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
1bc40 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
1bc50 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
1bc60 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
1bc70 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e  , pOp->p2, pOp->
1bc80 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p3);.  if( pOp->
1bc90 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
1bca0 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
1bcb0 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
1bcc0 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
1bcd0 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
1bce0 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
1bcf0 6c 6c 79 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  lly */.    asser
1bd00 74 28 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65  t( db->bConcurre
1bd10 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 70 44 62  nt==0 );.    pDb
1bd20 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ->pSchema->schem
1bd30 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e  a_cookie = pOp->
1bd40 70 33 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67  p3;.    db->flag
1bd50 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65  s |= SQLITE_Inte
1bd60 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c  rnChanges;.  }el
1bd70 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
1bd80 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
1bd90 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
1bda0 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
1bdb0 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
1bdc0 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1bdd0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
1bde0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20   pOp->p3;.  }.  
1bdf0 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29  if( pOp->p1==1 )
1be00 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64  {.    /* Invalid
1be10 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64  ate all prepared
1be20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
1be30 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61  ever the TEMP da
1be40 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63  tabase.    ** sc
1be50 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e  hema is changed.
1be60 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a    Ticket #1644 *
1be70 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  /.    sqlite3Exp
1be80 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
1be90 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70  ments(db);.    p
1bea0 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
1beb0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1bec0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1bed0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1bee0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1bef0 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
1bf00 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1bf10 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1bf20 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1bf30 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
1bf40 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
1bf50 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
1bf60 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
1bf70 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
1bf80 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
1bf90 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
1bfa0 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
1bfb0 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
1bfc0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
1bfd0 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
1bfe0 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
1bff0 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
1c000 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
1c010 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
1c020 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
1c030 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
1c040 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
1c050 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
1c060 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
1c070 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
1c080 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
1c090 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
1c0a0 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
1c0b0 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
1c0c0 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
1c0d0 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
1c0e0 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
1c0f0 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
1c100 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1c110 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
1c120 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
1c130 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
1c140 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
1c150 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
1c160 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
1c170 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
1c180 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
1c190 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
1c1a0 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
1c1b0 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
1c1c0 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
1c1d0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
1c1e0 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
1c1f0 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
1c200 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
1c210 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
1c220 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
1c230 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
1c240 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
1c250 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
1c260 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
1c270 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
1c280 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
1c290 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
1c2a0 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
1c2b0 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
1c2c0 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
1c2d0 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
1c2e0 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
1c2f0 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
1c300 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
1c310 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
1c320 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
1c330 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
1c340 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
1c350 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1c360 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1c370 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1c380 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1c390 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1c3a0 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1c3b0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1c3c0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1c3d0 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1c3e0 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1c3f0 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1c400 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1c410 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1c420 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1c430 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1c440 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1c450 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1c460 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1c470 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1c480 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c490 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
1c4a0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
1c4b0 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
1c4c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1c4d0 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
1c4e0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1c4f0 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1c500 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
1c510 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
1c520 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1c530 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70  e ReadOpen excep
1c540 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a  t that it first.
1c550 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
1c560 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f   if the cursor o
1c570 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20  n P1 is already 
1c580 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74  open with a root
1c590 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
1c5a0 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20  of P2 and if it 
1c5b0 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
1c5c0 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
1c5d0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1c5e0 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
1c5f0 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
1c600 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
1c610 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
1c620 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1c630 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
1c640 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20   with P5==0 and 
1c650 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a  with P4 being.**
1c660 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
1c670 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
1c680 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
1c690 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1c6a0 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74  e as.** every ot
1c6b0 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
1c6c0 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
1c6d0 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75  e same cursor nu
1c6e0 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  mber..**.** See 
1c6f0 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63  the OpenRead opc
1c700 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ode documentatio
1c710 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
1c720 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1c730 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c740 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
1c750 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1c760 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1c770 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1c780 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1c790 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
1c7a0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
1c7b0 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
1c7c0 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
1c7d0 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
1c7e0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1c7f0 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
1c800 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
1c810 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1c820 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1c830 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1c840 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1c850 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1c860 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1c870 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1c880 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1c890 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1c8a0 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1c8b0 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1c8c0 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1c8d0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1c8e0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1c8f0 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1c900 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1c910 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1c920 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1c930 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1c940 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1c950 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1c960 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
1c970 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
1c980 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
1c990 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
1c9a0 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
1c9b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1c9c0 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
1c9d0 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
1c9e0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1c9f0 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1ca00 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1ca10 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
1ca20 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
1ca30 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
1ca40 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
1ca50 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
1ca60 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
1ca70 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
1ca80 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
1ca90 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
1caa0 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  .case OP_ReopenI
1cab0 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65  dx: {.  int nFie
1cac0 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  ld;.  KeyInfo *p
1cad0 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70  KeyInfo;.  int p
1cae0 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  2;.  int iDb;.  
1caf0 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
1cb00 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
1cb10 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
1cb20 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72  b *pDb;..  asser
1cb30 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1cb40 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1cb50 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1cb60 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1cb70 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1cb80 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
1cb90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
1cba0 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e  ( pCur && pCur->
1cbb0 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70  pgnoRoot==(u32)p
1cbc0 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73  Op->p2 ){.    as
1cbd0 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d  sert( pCur->iDb=
1cbe0 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20  =pOp->p3 );     
1cbf0 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62   /* Guaranteed b
1cc00 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  y the code gener
1cc10 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ator */.    goto
1cc20 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74   open_cursor_set
1cc30 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a  _hints;.  }.  /*
1cc40 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1cc50 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1cc60 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20  open or is open 
1cc70 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20  on a different. 
1cc80 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20   ** index, then 
1cc90 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  fall through int
1cca0 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f  o OP_OpenRead to
1ccb0 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20   force a reopen 
1ccc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
1ccd0 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
1cce0 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72  nWrite:..  asser
1ccf0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1cd00 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20  OP_OpenWrite || 
1cd10 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1cd20 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1cd30 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1cd40 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1cd50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1cd60 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1cd70 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Read || pOp->opc
1cd80 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64  ode==OP_ReopenId
1cd90 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70  x.          || p
1cda0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
1cdb0 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  ..  if( p->expir
1cdc0 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
1cdd0 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1cde0 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61  BACK;.    goto a
1cdf0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1ce00 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  r;.  }..  nField
1ce10 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
1ce20 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
1ce30 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
1ce40 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1ce50 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1ce60 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1ce70 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1ce80 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
1ce90 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  ) );.  pDb = &db
1cea0 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
1ceb0 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
1cec0 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
1ced0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1cee0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1cef0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f  ){.    assert( O
1cf00 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d  PFLAG_FORDELETE=
1cf10 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45  =BTREE_FORDELETE
1cf20 20 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d   );.    wrFlag =
1cf30 20 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28   BTREE_WRCSR | (
1cf40 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1cf50 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20  _FORDELETE);.   
1cf60 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1cf70 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1cf80 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
1cf90 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
1cfa0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1cfb0 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
1cfc0 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
1cfd0 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
1cfe0 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
1cff0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1d000 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
1d010 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
1d020 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
1d030 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
1d040 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
1d050 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
1d060 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70    assert( p2<=(p
1d070 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
1d080 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49  ursor) );.    pI
1d090 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  n2 = &aMem[p2];.
1d0a0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1d0b0 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a  sValid(pIn2) );.
1d0c0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1d0d0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
1d0e0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  nt)!=0 );.    sq
1d0f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1d100 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
1d110 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
1d120 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68  ->u.i;.    /* Th
1d130 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79  e p2 value alway
1d140 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70  s comes from a p
1d150 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61  rior OP_CreateTa
1d160 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20  ble opcode and. 
1d170 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64     ** that opcod
1d180 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65  e will always se
1d190 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74  t the p2 value t
1d1a0 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65  o 2 or more or e
1d1b0 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a  lse fail..    **
1d1c0 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61   If there were a
1d1d0 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72   failure, the pr
1d1e0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
1d1f0 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74   would have halt
1d200 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65  ed.    ** before
1d210 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69   reaching this i
1d220 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20  nstruction. */. 
1d230 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32     assert( p2>=2
1d240 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1d250 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1d260 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
1d270 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1d280 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73  pKeyInfo;.    as
1d290 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1d2a0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1d2b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1d2c0 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1d2d0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1d2e0 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b  yInfo->nField+pK
1d2f0 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b  eyInfo->nXField;
1d300 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1d310 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1d320 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1d330 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1d340 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1d350 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1d360 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1d370 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1d380 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1d390 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1d3a0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1d3b0 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1d3c0 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1d3d0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1d3e0 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1d3f0 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1d400 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20  ;.  if( pCur==0 
1d410 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1d420 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
1d430 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72   1;.  pCur->isOr
1d440 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75  dered = 1;.  pCu
1d450 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32  r->pgnoRoot = p2
1d460 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1d470 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72  DEBUG.  pCur->wr
1d480 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23  Flag = wrFlag;.#
1d490 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c  endif.  rc = sql
1d4a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1d4b0 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20  pX, p2, wrFlag, 
1d4c0 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e  pKeyInfo, pCur->
1d4d0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70  uc.pCursor);.  p
1d4e0 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  Cur->pKeyInfo = 
1d4f0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53  pKeyInfo;.  /* S
1d500 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f  et the VdbeCurso
1d510 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62  r.isTable variab
1d520 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72  le. Previous ver
1d530 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51  sions of.  ** SQ
1d540 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65  Lite used to che
1d550 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70  ck if the root-p
1d560 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73  age flags were s
1d570 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e  ane at this poin
1d580 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72  t.  ** and repor
1d590 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
1d5a0 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65  ption if they we
1d5b0 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73  re not, but this
1d5c0 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20   check has.  ** 
1d5d0 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f  since moved into
1d5e0 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72   the btree layer
1d5f0 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e  .  */  .  pCur->
1d600 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70  isTable = pOp->p
1d610 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46  4type!=P4_KEYINF
1d620 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  O;..open_cursor_
1d630 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73  set_hints:.  ass
1d640 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  ert( OPFLAG_BULK
1d650 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c  CSR==BTREE_BULKL
1d660 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28  OAD );.  assert(
1d670 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d   OPFLAG_SEEKEQ==
1d680 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b  BTREE_SEEK_EQ );
1d690 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
1d6a0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55  ->p5 & OPFLAG_BU
1d6b0 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20  LKCSR );.#ifdef 
1d6c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
1d6d0 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73  RSOR_HINTS.  tes
1d6e0 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26  tcase( pOp->p2 &
1d6f0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29   OPFLAG_SEEKEQ )
1d700 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
1d710 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e  e3BtreeCursorHin
1d720 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e  tFlags(pCur->uc.
1d730 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20  pCursor,.       
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d750 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
1d760 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43   & (OPFLAG_BULKC
1d770 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  SR|OPFLAG_SEEKEQ
1d780 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  )));.  if( rc ) 
1d790 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d7a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1d7b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1d7c0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1d7d0 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1d7e0 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1d7f0 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1d800 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1d810 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1d820 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1d830 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1d840 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1d850 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1d860 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1d870 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1d880 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1d890 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1d8a0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1d8b0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1d8c0 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  losed..**.** P2 
1d8d0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1d8e0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1d8f0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
1d900 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
1d910 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
1d920 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
1d930 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
1d940 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
1d950 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
1d960 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
1d970 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
1d980 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
1d990 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
1d9a0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
1d9b0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
1d9c0 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
1d9d0 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
1d9e0 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
1d9f0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
1da00 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
1da10 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
1da20 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
1da30 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
1da40 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
1da50 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
1da60 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
1da70 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
1da80 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
1da90 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
1daa0 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
1dab0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
1dac0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
1dad0 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
1dae0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1daf0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
1db00 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
1db10 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
1db20 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
1db30 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
1db40 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
1db50 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
1db60 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
1db70 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
1db80 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
1db90 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
1dba0 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
1dbb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1dbc0 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
1dbd0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1dbe0 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
1dbf0 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e  or *pCx;.  KeyIn
1dc00 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  fo *pKeyInfo;.. 
1dc10 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
1dc20 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
1dc30 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1dc40 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
1dc50 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
1dc60 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
1dc70 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
1dc80 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
1dc90 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
1dca0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
1dcb0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
1dcc0 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28  NT_DB;.  assert(
1dcd0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1dce0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1dcf0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
1dd00 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1dd10 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
1dd20 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42  2, -1, CURTYPE_B
1dd30 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78  TREE);.  if( pCx
1dd40 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1dd50 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1dd60 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  w = 1;.  pCx->is
1dd70 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20  Ephemeral = 1;. 
1dd80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1dd90 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c  eeOpen(db->pVfs,
1dda0 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42   0, db, &pCx->pB
1ddb0 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  tx, .           
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
1ddd0 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1dde0 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c  | BTREE_SINGLE |
1ddf0 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61   pOp->p5, vfsFla
1de00 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  gs);.  if( rc==S
1de10 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1de20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1de30 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d  eBeginTrans(pCx-
1de40 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d 0a 20  >pBtx, 1);.  }. 
1de50 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1de60 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  OK ){.    /* If 
1de70 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1de80 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 63  x is required, c
1de90 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c  reate it by call
1dea0 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74  ing.    ** sqlit
1deb0 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1dec0 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54  le() with the BT
1ded0 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67  REE_BLOBKEY flag
1dee0 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f   before.    ** o
1def0 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
1df00 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
1df10 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
1df20 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a  t use the.    **
1df30 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
1df40 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69 74  reated table wit
1df50 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61  h root-page 1 (a
1df60 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61  n BLOB_INTKEY ta
1df70 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ble)..    */.   
1df80 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49   if( (pCx->pKeyI
1df90 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d  nfo = pKeyInfo =
1dfa0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1dfb0 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  o)!=0 ){.      i
1dfc0 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61  nt pgno;.      a
1dfd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1dfe0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1dff0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1e000 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1e010 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20  able(pCx->pBtx, 
1e020 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f  &pgno, BTREE_BLO
1e030 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b  BKEY | pOp->p5);
1e040 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d   .      if( rc==
1e050 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1e060 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67 6e       assert( pgn
1e070 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31  o==MASTER_ROOT+1
1e080 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1e090 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1e0a0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20  ==db );.        
1e0b0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1e0c0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1e0d0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
1e0e0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1e0f0 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e  r(pCx->pBtx, pgn
1e100 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  o, BTREE_WRCSR,.
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e130 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75  pKeyInfo, pCx->u
1e140 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
1e150 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1e160 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1e170 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1e180 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1e190 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20  rsor(pCx->pBtx, 
1e1a0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1e1b0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1d0 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d 3e          0, pCx->
1e1e0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1e1f0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1e200 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 1;.    }.  }. 
1e210 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1e220 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e230 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65  r;.  pCx->isOrde
1e240 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1e250 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1e260 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e270 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1e280 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1e290 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1e2a0 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1e2b0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1e2c0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1e2d0 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1e2e0 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1e2f0 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1e300 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1e310 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1e320 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1e330 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1e340 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1e350 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1e360 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1e370 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1e380 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1e390 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1e3a0 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1e3b0 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1e3c0 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1e3d0 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1e3e0 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1e3f0 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1e400 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1e410 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1e420 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1e430 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1e440 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1e450 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1e460 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1e470 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1e480 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1e490 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
1e4a0 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20 70  SORTER);.  if( p
1e4b0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1e4c0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1e4d0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1e4e0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1e4f0 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1e500 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1e510 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1e520 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1e530 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1e540 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1e550 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70  t(db, pOp->p3, p
1e560 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  Cx);.  if( rc ) 
1e570 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1e580 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1e590 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e5a0 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20  SequenceTest P1 
1e5b0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1e5c0 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72  psis: if( cursor
1e5d0 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20  [P1].ctr++ ) pc 
1e5e0 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  = P2.**.** P1 is
1e5f0 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
1e600 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63  . If the sequenc
1e610 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  e counter is cur
1e620 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d  rently zero, jum
1e630 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61  p.** to P2. Rega
1e640 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
1e650 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
1e660 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72  p is taken, incr
1e670 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65  ement the.** the
1e680 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e   sequence value.
1e690 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75  .*/.case OP_Sequ
1e6a0 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64  enceTest: {.  Vd
1e6b0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1e6c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1e6d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1e6e0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
1e6f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1e700 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1e710 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
1e720 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f    if( (pC->seqCo
1e730 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20  unt++)==0 ){.   
1e740 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1e750 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1e760 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1e770 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33  nPseudo P1 P2 P3
1e780 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1e790 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  : P3 columns in 
1e7a0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  r[P2].**.** Open
1e7b0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68   a new cursor th
1e7c0 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66  at points to a f
1e7d0 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  ake table that c
1e7e0 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65  ontains a single
1e7f0 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e  .** row of data.
1e800 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    The content of
1e810 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73   that one row is
1e820 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1e830 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74  memory.** regist
1e840 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72  er P2.  In other
1e850 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50   words, cursor P
1e860 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69  1 becomes an ali
1e870 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d  as for the .** M
1e880 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20  EM_Blob content 
1e890 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67  contained in reg
1e8a0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
1e8b0 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  A pseudo-table c
1e8c0 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f  reated by this o
1e8d0 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f  pcode is used to
1e8e0 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a   hold a single.*
1e8f0 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f  * row output fro
1e900 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20  m the sorter so 
1e910 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e  that the row can
1e920 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69   be decomposed i
1e930 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61  nto.** individua
1e940 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20  l columns using 
1e950 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  the OP_Column op
1e960 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f  code.  The OP_Co
1e970 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  lumn opcode.** i
1e980 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f  s the only curso
1e990 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f  r opcode that wo
1e9a0 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64  rks with a pseud
1e9b0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50  o-table..**.** P
1e9c0 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  3 is the number 
1e9d0 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  of fields in the
1e9e0 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69   records that wi
1e9f0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a  ll be stored by.
1ea00 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61  ** the pseudo-ta
1ea10 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
1ea20 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20  OpenPseudo: {.  
1ea30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1ea40 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1ea50 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1ea60 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29  rt( pOp->p3>=0 )
1ea70 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1ea80 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1ea90 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31  >p1, pOp->p3, -1
1eaa0 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  , CURTYPE_PSEUDO
1eab0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1eac0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1ead0 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
1eae0 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73 65  1;.  pCx->uc.pse
1eaf0 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f  udoTableReg = pO
1eb00 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1eb10 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73  Table = 1;.  ass
1eb20 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1eb30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1eb40 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20  * Opcode: Close 
1eb50 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
1eb60 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20   Close a cursor 
1eb70 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1eb80 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20  d as P1.  If P1 
1eb90 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e  is not.** curren
1eba0 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69  tly open, this i
1ebb0 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20  nstruction is a 
1ebc0 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f  no-op..*/.case O
1ebd0 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73  P_Close: {.  ass
1ebe0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ebf0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ec00 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74  ursor );.  sqlit
1ec10 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72  e3VdbeFreeCursor
1ec20 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  (p, p->apCsr[pOp
1ec30 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43  ->p1]);.  p->apC
1ec40 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b  sr[pOp->p1] = 0;
1ec50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
1ec60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1ec70 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1ec80 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  SK./* Opcode: Co
1ec90 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a  lumnsUsed P1 * *
1eca0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73   P4 *.**.** This
1ecb0 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f   opcode (which o
1ecc0 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53 51  nly exists if SQ
1ecd0 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65  Lite was compile
1ece0 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45  d with.** SQLITE
1ecf0 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
1ed00 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69  SED_MASK) identi
1ed10 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d  fies which colum
1ed20 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62  ns of the.** tab
1ed30 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20  le or index for 
1ed40 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75 73  cursor P1 are us
1ed50 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d  ed.  P4 is a 64-
1ed60 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28  bit integer.** (
1ed70 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69  P4_INT64) in whi
1ed80 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33 20  ch the first 63 
1ed90 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72  bits are one for
1eda0 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20   each of the.** 
1edb0 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73  first 63 columns
1edc0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
1edd0 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20   index that are 
1ede0 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a  actually used.**
1edf0 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20   by the cursor. 
1ee00 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   The high-order 
1ee10 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61 6e  bit is set if an
1ee20 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a  y column after.*
1ee30 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75 73  * the 64th is us
1ee40 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ed..*/.case OP_C
1ee50 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20  olumnsUsed: {.  
1ee60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1ee70 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1ee80 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1ee90 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
1eea0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
1eeb0 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65  );.  pC->maskUse
1eec0 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e  d = *(u64*)pOp->
1eed0 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
1eee0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
1eef0 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1ef00 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1ef10 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1ef20 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1ef30 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1ef40 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1ef50 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1ef60 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1ef70 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1ef80 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1ef90 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1efa0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1efb0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1efc0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1efd0 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1efe0 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1eff0 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1f000 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1f010 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1f020 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1f030 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1f040 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1f050 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1f060 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1f070 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1f080 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1f090 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1f0a0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1f0b0 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1f0c0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1f0d0 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1f0e0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1f0f0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1f100 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1f110 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
1f120 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
1f130 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
1f140 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
1f150 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1f160 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
1f170 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
1f180 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
1f190 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
1f1a0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1f1b0 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
1f1c0 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
1f1d0 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
1f1e0 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
1f1f0 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20  wed by an IdxLE 
1f200 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
1f210 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
1f220 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63  ** The IdxLE opc
1f230 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
1f240 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
1f250 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
1f260 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70   the.** IdxLE op
1f270 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1f280 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
1f290 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
1f2a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1f2b0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1f2c0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1f2d0 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1f2e0 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1f2f0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1f300 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1f310 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1f320 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1f330 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1f340 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1f350 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1f360 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1f370 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1f380 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGt, SeekLe.*/./
1f390 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54  * Opcode: SeekGT
1f3a0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1f3b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1f3c0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1f3d0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1f3e0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1f3f0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1f400 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1f410 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1f420 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1f430 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1f440 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1f450 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1f460 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1f470 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1f480 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1f490 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1f4a0 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1f4b0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1f4c0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1f4d0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1f4e0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1f4f0 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1f500 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1f510 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1f520 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1f530 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1f540 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65  o records greate
1f550 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  r than .** the k
1f560 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1f570 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1f580 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1f590 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1f5a0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1f5b0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1f5c0 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
1f5d0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
1f5e0 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
1f5f0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
1f600 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1f610 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1f620 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
1f630 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a   not Prev..**.**
1f640 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1f650 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1f660 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Lt, SeekGe, Seek
1f670 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1f680 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33   SeekLT P1 P2 P3
1f690 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73   P4 * .** Synops
1f6a0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1f6b0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1f6c0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1f6d0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1f6e0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1f6f0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1f700 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1f710 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1f720 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1f730 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1f740 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1f750 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1f760 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1f770 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1f780 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1f790 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1f7a0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1f7b0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1f7c0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1f7d0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1f7e0 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1f7f0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1f800 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
1f810 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1f820 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65  re no records le
1f830 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  ss than .** the 
1f840 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1f850 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1f860 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1f870 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1f880 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1f890 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1f8a0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1f8b0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1f8c0 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1f8d0 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1f8e0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1f8f0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1f900 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1f910 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1f920 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1f930 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1f940 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1f950 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1f960 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50  : SeekLE P1 P2 P
1f970 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1f980 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1f990 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1f9a0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1f9b0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1f9c0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1f9d0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1f9e0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1f9f0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1fa00 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1fa10 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1fa20 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1fa30 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1fa40 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1fa50 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1fa60 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1fa70 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1fa80 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1fa90 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1faa0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1fab0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1fac0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1fad0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1fae0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1faf0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1fb00 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1fb10 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73   records .** les
1fb20 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1fb30 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1fb40 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1fb50 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1fb60 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1fb70 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1fb80 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1fb90 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
1fba0 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
1fbb0 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
1fbc0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
1fbd0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1fbe0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1fbf0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1fc00 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
1fc10 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
1fc20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1fc30 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1fc40 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1fc50 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1fc60 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1fc70 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1fc80 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1fc90 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1fca0 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1fcb0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1fcc0 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1fcd0 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1fce0 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1fcf0 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1fd00 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1fd10 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  GE opcode with t
1fd20 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1fd30 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20  s..** The IdxGE 
1fd40 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1fd50 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1fd60 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1fd70 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45  but the.** IdxGE
1fd80 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1fd90 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1fda0 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1fdb0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ns..**.** See al
1fdc0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1fdd0 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1fde0 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63  kGe, SeekLt.*/.c
1fdf0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20  ase OP_SeekLT:  
1fe00 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1fe10 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1fe20 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f  eekLE:         /
1fe30 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1fe40 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
1fe50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1fe60 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1fe70 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
1fe80 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1fe90 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
1fea0 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
1feb0 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e  n result */.  in
1fec0 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  t oc;           
1fed0 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20   /* Opcode */.  
1fee0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
1fef0 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72     /* The cursor
1ff00 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e   to seek */.  Un
1ff10 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20  packedRecord r; 
1ff20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73   /* The key to s
1ff30 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  eek for */.  int
1ff40 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
1ff50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
1ff60 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69  umns or fields i
1ff70 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69  n the key */.  i
1ff80 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
1ff90 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1ffa0 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1ffb0 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79   */.  int eqOnly
1ffc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ;        /* Only
1ffd0 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d   interested in =
1ffe0 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20  = results */..  
1fff0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
20000 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
20010 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
20020 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
20030 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
20040 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
20050 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
20060 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
20070 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
20080 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
20090 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d  rt( OP_SeekLE ==
200a0 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a   OP_SeekLT+1 );.
200b0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
200c0 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGE == OP_SeekLT
200d0 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
200e0 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f  OP_SeekGT == OP_
200f0 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73  SeekLT+3 );.  as
20100 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
20110 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
20120 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
20130 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70  =0 );.  oc = pOp
20140 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e  ->opcode;.  eqOn
20150 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75  ly = 0;.  pC->nu
20160 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
20170 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
20180 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
20190 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
201a0 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54  f..  if( pC->isT
201b0 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54  able ){.    /* T
201c0 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
201d0 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65   flag is only se
201e0 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f  t on index curso
201f0 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  rs */.    assert
20200 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
20210 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e  rsorHasHint(pC->
20220 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45  uc.pCursor, BTRE
20230 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20  E_SEEK_EQ)==0.  
20240 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 43              || C
20250 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20  ORRUPT_DB );..  
20260 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
20270 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
20280 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
20290 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
202a0 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62  string,.    ** b
202b0 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
202c0 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
202d0 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
202e0 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
202f0 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
20300 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f  o convert it. */
20310 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  .    pIn3 = &aMe
20320 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
20330 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
20340 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
20350 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
20360 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
20370 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
20380 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a  inity(pIn3, 0);.
20390 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d      }.    iKey =
203a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
203b0 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20  alue(pIn3);..   
203c0 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
203d0 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  lue could not be
203e0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
203f0 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
20400 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f  ut.    ** loss o
20410 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  f information, t
20420 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63  hen special proc
20430 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72  essing is requir
20440 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  ed... */.    if(
20450 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
20460 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
20470 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
20480 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
20490 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
204a0 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
204b0 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
204c0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
204d0 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
204e0 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  ,.        ** the
204f0 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f  n the seek is no
20500 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a  t possible, so j
20510 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
20520 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
20530 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20  aken(1,2); goto 
20540 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
20550 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
20560 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
20570 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
20580 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
20590 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
205a0 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
205b0 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
205c0 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
205d0 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
205e0 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
205f0 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
20600 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
20610 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
20620 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
20630 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
20640 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
20650 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
20660 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
20670 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
20680 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
20690 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
206a0 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65  In3->u.r<(double
206b0 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
206c0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
206d0 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31  GE==(OP_SeekGT-1
206e0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
206f0 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d  ert( OP_SeekLT==
20700 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b  (OP_SeekLE-1) );
20710 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20720 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78   (OP_SeekLE & 0x
20730 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
20740 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  T & 0x0001) );. 
20750 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
20760 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
20770 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
20780 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
20790 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
207a0 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
207b0 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
207c0 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
207d0 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
207e0 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
207f0 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
20800 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
20810 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
20820 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29  n3->u.r>(double)
20830 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
20840 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
20850 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
20860 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
20870 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
20880 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
20890 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
208a0 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
208b0 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
208c0 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
208d0 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
208e0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
208f0 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
20900 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
20910 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
20920 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
20930 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
20940 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
20950 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b  )iKey, 0, &res);
20960 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
20970 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
20980 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
20990 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  ete */.    if( r
209a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
209b0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
209c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
209d0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
209e0 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f    /* For a curso
209f0 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  r with the BTREE
20a00 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f  _SEEK_EQ hint, o
20a10 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47  nly the OP_SeekG
20a20 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f  E and.    ** OP_
20a30 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61  SeekLE opcodes a
20a40 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20  re allowed, and 
20a50 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d  these must be im
20a60 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
20a70 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20  ed.    ** by an 
20a80 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49  OP_IdxGT or OP_I
20a90 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73  dxLT opcode, res
20aa0 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20  pectively, with 
20ab0 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20  the same key..  
20ac0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c    */.    if( sql
20ad0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
20ae0 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43  asHint(pC->uc.pC
20af0 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
20b00 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65  K_EQ) ){.      e
20b10 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20  qOnly = 1;.     
20b20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
20b30 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  code==OP_SeekGE 
20b40 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
20b50 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20  OP_SeekLE );.   
20b60 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20b70 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
20b80 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
20b90 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
20ba0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
20bb0 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d  Op[1].p1==pOp[0]
20bc0 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p1 );.      ass
20bd0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d  ert( pOp[1].p2==
20be0 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20  pOp[0].p2 );.   
20bf0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20c00 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20  ].p3==pOp[0].p3 
20c10 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
20c20 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f   pOp[1].p4.i==pO
20c30 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20  p[0].p4.i );.   
20c40 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   }..    nField =
20c50 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
20c60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
20c70 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
20c80 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69  .    assert( nFi
20c90 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70  eld>0 );.    r.p
20ca0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
20cb0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
20cc0 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
20cd0 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  ld;..    /* The 
20ce0 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64  next line of cod
20cf0 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f  e computes as fo
20d00 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74  llows, only fast
20d10 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28  er:.    **   if(
20d20 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc==OP_SeekGT |
20d30 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
20d40 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  ){.    **     r.
20d50 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
20d60 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
20d70 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
20d80 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20  fault_rc = +1;. 
20d90 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
20da0 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
20db0 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20  c = ((1 & (oc - 
20dc0 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31  OP_SeekLT)) ? -1
20dd0 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65   : +1);.    asse
20de0 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
20df0 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
20e00 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
20e10 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20e20 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LE || r.default_
20e30 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
20e40 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
20e50 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGE || r.default
20e60 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61  _rc==+1 );.    a
20e70 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
20e80 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLT || r.defaul
20e90 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20  t_rc==+1 );..   
20ea0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
20eb0 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
20ec0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
20ed0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
20ee0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
20ef0 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
20f00 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
20f10 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
20f20 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30      r.eqSeen = 0
20f30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
20f40 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
20f50 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
20f60 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  rsor, &r, 0, 0, 
20f70 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72  &res);.    if( r
20f80 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20f90 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20fa0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20fb0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f     }.    if( eqO
20fc0 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d  nly && r.eqSeen=
20fd0 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
20fe0 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20  rt( res!=0 );.  
20ff0 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f      goto seek_no
21000 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20  t_found;.    }. 
21010 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65   }.  pC->deferre
21020 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
21030 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21040 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
21050 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
21060 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
21070 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  h_count++;.#endi
21080 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53  f.  if( oc>=OP_S
21090 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74  eekGE ){  assert
210a0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc==OP_SeekGE 
210b0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  || oc==OP_SeekGT
210c0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c   );.    if( res<
210d0 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
210e0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29  oc==OP_SeekGT) )
210f0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
21100 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
21110 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d  te3BtreeNext(pC-
21120 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
21130 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
21140 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
21150 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21160 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
21170 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
21180 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
21190 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d      assert( oc==
211a0 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d  OP_SeekLT || oc=
211b0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
211c0 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28    if( res>0 || (
211d0 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
211e0 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20  _SeekLT) ){.    
211f0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
21200 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21210 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75  eePrevious(pC->u
21220 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
21230 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
21240 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
21250 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21260 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
21270 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67        /* res mig
21280 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20 62  ht be negative b
21290 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
212a0 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63   is empty.  Chec
212b0 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65  k to.      ** se
212c0 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68 65  e if this is the
212d0 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   case..      */.
212e0 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69        res = sqli
212f0 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e  te3BtreeEof(pC->
21300 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
21310 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f   }.  }.seek_not_
21320 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28  found:.  assert(
21330 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
21340 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
21350 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
21360 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f   res ){.    goto
21370 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
21380 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20  else if( eqOnly 
21390 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
213a0 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
213b0 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
213c0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
213d0 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20  T );.    pOp++; 
213e0 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49  /* Skip the OP_I
213f0 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54  dxLt or OP_IdxGT
21400 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f   that follows */
21410 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21420 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e  ./* Opcode: Foun
21430 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
21440 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
21450 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
21460 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
21470 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
21480 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
21490 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
214a0 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
214b0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
214c0 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
214d0 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
214e0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
214f0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a  d.** record..**.
21500 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
21510 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
21520 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
21530 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
21540 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
21550 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  a prefix of any 
21560 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
21570 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
21580 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20  to P2 and.** P1 
21590 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
215a0 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67   at the matching
215b0 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
215c0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
215d0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
215e0 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
215f0 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76  it can be.** adv
21600 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72  anced in the for
21610 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20  ward direction. 
21620 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75   The Next instru
21630 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c  ction will work,
21640 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20  .** but not the 
21650 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e  Prev instruction
21660 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
21670 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  : NotFound, NoCo
21680 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74  nflict, NotExist
21690 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20  s. SeekGe.*/./* 
216a0 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64  Opcode: NotFound
216b0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
216c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
216d0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
216e0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
216f0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
21700 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
21710 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
21720 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
21730 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
21740 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
21750 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
21760 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
21770 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
21780 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
21790 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
217a0 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
217b0 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
217c0 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20  P3 and P4.** is 
217d0 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20 6f  not the prefix o
217e0 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
217f0 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
21800 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66   made to P2.  If
21810 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e   P1 .** does con
21820 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68  tain an entry wh
21830 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63 68  ose prefix match
21840 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65 63  es the P3/P4 rec
21850 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c  ord then control
21860 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67  .** falls throug
21870 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
21880 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31  struction and P1
21890 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
218a0 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63  g at the.** matc
218b0 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a  hing entry..**.*
218c0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
218d0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
218e0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
218f0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
21900 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
21910 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
21920 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
21930 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
21940 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
21950 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
21960 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
21970 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
21980 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  : Found, NotExis
21990 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  ts, NoConflict.*
219a0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43  /./* Opcode: NoC
219b0 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33  onflict P1 P2 P3
219c0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
219d0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
219e0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
219f0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
21a00 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
21a10 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
21a20 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
21a30 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
21a40 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
21a50 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
21a60 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
21a70 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
21a80 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
21a90 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
21aa0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
21ab0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
21ac0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
21ad0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79  .** contains any
21ae0 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d   NULL value, jum
21af0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
21b00 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72   P2.  If all ter
21b10 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63  ms of the.** rec
21b20 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c  ord are not-NULL
21b30 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73   then a check is
21b40 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69   done to determi
21b50 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e  ne if any row in
21b60 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78   the.** P1 index
21b70 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74   btree has a mat
21b80 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78  ching key prefix
21b90 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
21ba0 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70  no matches, jump
21bb0 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  .** immediately 
21bc0 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65  to P2.  If there
21bd0 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c   is a match, fal
21be0 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65  l through and le
21bf0 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75  ave the P1.** cu
21c00 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
21c10 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f   the matching ro
21c20 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  w..**.** This op
21c30 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20  code is similar 
21c40 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77  to OP_NotFound w
21c50 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f  ith the exceptio
21c60 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62  ns that the.** b
21c70 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20  ranch is always 
21c80 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72  taken if any par
21c90 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20  t of the search 
21ca0 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  key input is NUL
21cb0 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  L..**.** This op
21cc0 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
21cd0 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
21ce0 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
21cf0 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e  nnot be.** advan
21d00 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69  ced in either di
21d10 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
21d20 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
21d30 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f  xt and Prev.** o
21d40 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f  pcodes do not wo
21d50 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70  rk after this op
21d60 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  eration..**.** S
21d70 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
21d80 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  d, Found, NotExi
21d90 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  sts.*/.case OP_N
21da0 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f  oConflict:     /
21db0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
21dc0 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
21dd0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
21de0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
21df0 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
21e00 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
21e10 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
21e20 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75  ts;.  int takeJu
21e30 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20  mp;.  int ii;.  
21e40 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21e50 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
21e60 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72  ackedRecord *pFr
21e70 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  ee;.  UnpackedRe
21e80 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20  cord *pIdxKey;. 
21e90 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
21ea0 72 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  r;..#ifdef SQLIT
21eb0 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
21ec0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
21ed0 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
21ee0 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
21ef0 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
21f00 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
21f10 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
21f20 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
21f30 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
21f40 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
21f50 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
21f60 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
21f70 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
21f80 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
21f90 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
21fa0 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
21fb0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
21fc0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
21fd0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
21fe0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
21ff0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
22000 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
22010 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22020 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28  able==0 );.  if(
22030 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a   pOp->p4.i>0 ){.
22040 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d      r.pKeyInfo =
22050 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
22060 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75     r.nField = (u
22070 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
22080 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b    r.aMem = pIn3;
22090 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
220a0 45 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d  EBUG.    for(ii=
220b0 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  0; ii<r.nField; 
220c0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73  ii++){.      ass
220d0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
220e0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a  &r.aMem[ii]) );.
220f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 72        assert( (r
22100 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20  .aMem[ii].flags 
22110 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c  & MEM_Zero)==0 |
22120 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d  | r.aMem[ii].n==
22130 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69  0 );.      if( i
22140 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41  i ) REGISTER_TRA
22150 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26  CE(pOp->p3+ii, &
22160 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20  r.aMem[ii]);.   
22170 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49   }.#endif.    pI
22180 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20  dxKey = &r;.    
22190 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c  pFree = 0;.  }el
221a0 73 65 7b 0a 20 20 20 20 70 46 72 65 65 20 3d 20  se{.    pFree = 
221b0 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
221c0 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b  3VdbeAllocUnpack
221d0 65 64 52 65 63 6f 72 64 28 70 43 2d 3e 70 4b 65  edRecord(pC->pKe
221e0 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69 66 28 20  yInfo);.    if( 
221f0 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74  pIdxKey==0 ) got
22200 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
22210 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
22220 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
22230 20 20 20 20 28 76 6f 69 64 29 45 78 70 61 6e 64      (void)Expand
22240 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
22250 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
22260 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
22270 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
22280 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
22290 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  ;.  }.  pIdxKey-
222a0 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
222b0 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b  .  takeJump = 0;
222c0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
222d0 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
222e0 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
222f0 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
22300 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
22310 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
22320 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
22330 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
22340 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
22350 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
22360 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
22370 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
22380 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
22390 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
223a0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
223b0 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
223c0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
223d0 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a  ){.        takeJ
223e0 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ump = 1;.       
223f0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
22400 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
22410 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
22420 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
22430 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  uc.pCursor, pIdx
22440 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
22450 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29 20  ;.  if( pFree ) 
22460 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
22470 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66 28 20  , pFree);.  if( 
22480 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
22490 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
224a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
224b0 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  }.  pC->seekResu
224c0 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65  lt = res;.  alre
224d0 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65 73  adyExists = (res
224e0 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  ==0);.  pC->null
224f0 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45  Row = 1-alreadyE
22500 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66  xists;.  pC->def
22510 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
22520 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
22530 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
22540 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
22550 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b  ode==OP_Found ){
22560 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
22570 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73  aken(alreadyExis
22580 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
22590 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20  ( alreadyExists 
225a0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
225b0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
225c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
225d0 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64  takeJump||alread
225e0 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20  yExists==0,2);. 
225f0 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20     if( takeJump 
22600 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73 74  || !alreadyExist
22610 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
22620 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
22630 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22640 53 65 65 6b 52 6f 77 69 64 20 50 31 20 50 32 20  SeekRowid P1 P2 
22650 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
22660 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
22670 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
22680 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73   index of a curs
22690 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51  or open on an SQ
226a0 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28 77  L table btree (w
226b0 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b  ith integer.** k
226c0 65 79 73 29 2e 20 20 49 66 20 72 65 67 69 73 74  eys).  If regist
226d0 65 72 20 50 33 20 64 6f 65 73 20 6e 6f 74 20 63  er P3 does not c
226e0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
226f0 72 20 6f 72 20 69 66 20 50 31 20 64 6f 65 73 20  r or if P1 does 
22700 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 20 61  not.** contain a
22710 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77   record with row
22720 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20  id P3 then jump 
22730 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
22740 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69 66 20 50  2.  .** Or, if P
22750 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e  2 is 0, raise an
22760 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
22770 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
22780 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 61 20 72  s contain.** a r
22790 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64  ecord with rowid
227a0 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61   P3 then .** lea
227b0 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f  ve the cursor po
227c0 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72  inting at that r
227d0 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74  ecord and fall t
227e0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
227f0 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  xt.** instructio
22800 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  n..**.** The OP_
22810 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65  NotExists opcode
22820 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
22830 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c 20 62 75  me operation, bu
22840 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74 45 78 69  t with OP_NotExi
22850 73 74 73 0a 2a 2a 20 74 68 65 20 50 33 20 72 65  sts.** the P3 re
22860 67 69 73 74 65 72 20 6d 75 73 74 20 62 65 20 67  gister must be g
22870 75 61 72 61 6e 74 65 65 64 20 74 6f 20 63 6f 6e  uaranteed to con
22880 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20  tain an integer 
22890 76 61 6c 75 65 2e 20 20 57 69 74 68 20 74 68 69  value.  With thi
228a0 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20 72 65 67  s.** opcode, reg
228b0 69 73 74 65 72 20 50 33 20 6d 69 67 68 74 20 6e  ister P3 might n
228c0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
228d0 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  teger..**.** The
228e0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63   OP_NotFound opc
228f0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
22900 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20   same operation 
22910 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a  on index btrees.
22920 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61  ** (with arbitra
22930 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b  ry multi-value k
22940 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  eys)..**.** This
22950 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
22960 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
22970 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
22980 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64  nnot be advanced
22990 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69  .** in either di
229a0 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
229b0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
229c0 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f  xt and Prev opco
229d0 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20  des will.** not 
229e0 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  work following t
229f0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
22a00 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
22a10 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  d, NotFound, NoC
22a20 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77  onflict, SeekRow
22a30 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  id.*/./* Opcode:
22a40 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32   NotExists P1 P2
22a50 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
22a60 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
22a70 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ].**.** P1 is th
22a80 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72  e index of a cur
22a90 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53  sor open on an S
22aa0 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28  QL table btree (
22ab0 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20  with integer.** 
22ac0 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e  keys).  P3 is an
22ad0 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20   integer rowid. 
22ae0 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20   If P1 does not 
22af0 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
22b00 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50   with.** rowid P
22b10 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
22b20 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
22b30 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20  Or, if P2 is 0, 
22b40 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49  raise an.** SQLI
22b50 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72  TE_CORRUPT error
22b60 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e  . If P1 does con
22b70 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
22b80 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  th rowid P3 then
22b90 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63   .** leave the c
22ba0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61  ursor pointing a
22bb0 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e  t that record an
22bc0 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
22bd0 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  o the next.** in
22be0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
22bf0 20 54 68 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69   The OP_SeekRowi
22c00 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
22c10 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
22c20 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f 20 61 6c  tion but also al
22c30 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50 33 20 72  lows the.** P3 r
22c40 65 67 69 73 74 65 72 20 74 6f 20 63 6f 6e 74 61  egister to conta
22c50 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65 67 65 72  in a non-integer
22c60 20 76 61 6c 75 65 2c 20 69 6e 20 77 68 69 63 68   value, in which
22c70 20 63 61 73 65 20 74 68 65 20 6a 75 6d 70 20 69   case the jump i
22c80 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b 65  s.** always take
22c90 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  n.  This opcode 
22ca0 72 65 71 75 69 72 65 73 20 74 68 61 74 20 50 33  requires that P3
22cb0 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 20   always contain 
22cc0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
22cd0 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
22ce0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
22cf0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
22d00 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
22d10 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
22d20 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
22d30 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
22d40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
22d50 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
22d60 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
22d70 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
22d80 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
22d90 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
22da0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
22db0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
22dc0 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
22dd0 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
22de0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
22df0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22e00 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
22e10 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65  , NoConflict, Se
22e20 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61 73 65 20  ekRowid.*/.case 
22e30 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a 20 7b 20  OP_SeekRowid: { 
22e40 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
22e50 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in3 */.  VdbeCur
22e60 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
22e70 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
22e80 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b 65  t res;.  u64 iKe
22e90 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  y;..  pIn3 = &aM
22ea0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
22eb0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
22ec0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
22ed0 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
22ee0 74 79 28 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f  ty(pIn3, SQLITE_
22ef0 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
22f00 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20  oding);.    if( 
22f10 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
22f20 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20 67 6f 74  EM_Int)==0 ) got
22f30 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
22f40 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
22f50 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45  ugh into OP_NotE
22f60 78 69 73 74 73 20 2a 2f 0a 63 61 73 65 20 4f 50  xists */.case OP
22f70 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20 20 20 20  _NotExists:     
22f80 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
22f90 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61  3 */.  pIn3 = &a
22fa0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
22fb0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
22fc0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
22fd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22fe0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22ff0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
23000 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
23010 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
23020 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64  t( pC!=0 );.#ifd
23030 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
23040 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30    pC->seekOp = 0
23050 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72  ;.#endif.  asser
23060 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
23070 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23080 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
23090 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
230a0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
230b0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
230c0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
230d0 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
230e0 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
230f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
23100 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
23110 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
23120 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
23130 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
23140 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d   res==0 );.  pC-
23150 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
23160 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
23170 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
23180 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
23190 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
231a0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
231b0 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  E;.  pC->deferre
231c0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56  dMoveto = 0;.  V
231d0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
231e0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e  es!=0,2);.  pC->
231f0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
23200 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
23210 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
23220 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
23230 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
23240 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
23250 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
23260 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
23270 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
23280 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
23290 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
232a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
232b0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
232c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
232d0 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
232e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
232f0 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63  P2]=cursor[P1].c
23300 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20  tr++.**.** Find 
23310 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62  the next availab
23320 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  le sequence numb
23330 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31  er for cursor P1
23340 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73  ..** Write the s
23350 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69  equence number i
23360 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
23370 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65  .** The sequence
23380 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63   number on the c
23390 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65  ursor is increme
233a0 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73 0a  nted after this.
233b0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
233c0 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71   .*/.case OP_Seq
233d0 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  uence: {        
233e0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
233f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
23400 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
23410 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
23420 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
23430 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
23440 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
23450 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54  [pOp->p1]->eCurT
23460 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
23470 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  B );.  pOut = ou
23480 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
23490 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
234a0 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  i = p->apCsr[pOp
234b0 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b  ->p1]->seqCount+
234c0 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  +;.  break;.}...
234d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f  /* Opcode: NewRo
234e0 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
234f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
23500 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
23510 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65  Get a new intege
23520 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  r record number 
23530 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20  (a.k.a "rowid") 
23540 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
23550 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  to a table..** T
23560 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  he record number
23570 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
23580 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79  ly used as a key
23590 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
235a0 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63  .** table that c
235b0 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20  ursor P1 points 
235c0 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63  to.  The new rec
235d0 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72  ord number is wr
235e0 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e  itten.** written
235f0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
23600 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74  .**.** If P3>0 t
23610 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69  hen P3 is a regi
23620 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
23630 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
23640 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a  DBE that holds .
23650 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70  ** the largest p
23660 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
23670 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
23680 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64  r. No new record
23690 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20   numbers are.** 
236a0 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
236b0 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c  ss than this val
236c0 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61  ue. When this va
236d0 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20  lue reaches its 
236e0 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20  maximum, .** an 
236f0 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f  SQLITE_FULL erro
23700 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20  r is generated. 
23710 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  The P3 register 
23720 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
23730 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74  the '.** generat
23740 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
23750 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e  . This P3 mechan
23760 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68  ism is used to h
23770 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68  elp implement th
23780 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45  e.** AUTOINCREME
23790 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63  NT feature..*/.c
237a0 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a  ase OP_NewRowid:
237b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
237c0 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b  out2 */.  i64 v;
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237e0 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69   /* The new rowi
237f0 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
23800 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a  r *pC;        /*
23810 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65   Cursor of table
23820 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20   to get the new 
23830 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72  rowid */.  int r
23840 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
23850 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61    /* Result of a
23860 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  n sqlite3BtreeLa
23870 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  st() */.  int cn
23880 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23890 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c   /* Counter to l
238a0 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20  imit the number 
238b0 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20  of searches */. 
238c0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
238d0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
238e0 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67  ter holding larg
238f0 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55  est rowid for AU
23900 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
23910 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
23920 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20  me;     /* Root 
23930 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f  frame of VDBE */
23940 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73  ..  v = 0;.  res
23950 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f   = 0;.  pOut = o
23960 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
23970 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
23980 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23990 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
239a0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
239b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
239c0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
239d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
239e0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
239f0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
23a00 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
23a10 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20  sor!=0 );.  {.  
23a20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
23a30 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
23a40 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
23a50 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
23a60 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
23a70 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
23a80 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
23a90 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
23aa0 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
23ab0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
23ac0 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
23ad0 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
23ae0 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
23af0 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
23b00 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
23b10 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
23b20 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
23b30 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
23b40 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
23b50 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
23b60 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
23b70 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
23b80 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
23b90 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
23ba0 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
23bb0 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
23bc0 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
23bd0 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
23be0 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
23bf0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
23c00 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
23c10 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
23c20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
23c30 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
23c40 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
23c50 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
23c60 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
23c70 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
23c80 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
23c90 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
23ca0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
23cb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
23cc0 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
23cd0 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
23ce0 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
23cf0 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
23d00 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
23d10 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
23d20 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
23d30 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
23d40 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
23d50 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
23d60 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
23d70 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
23d80 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
23d90 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
23da0 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
23db0 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
23dc0 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
23dd0 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
23de0 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
23df0 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
23e00 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
23e10 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
23e20 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
23e30 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
23e40 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
23e50 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
23e60 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
23e70 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
23e80 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23e90 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
23ea0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23eb0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
23ec0 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
23ed0 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
23ee0 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
23ef0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
23f00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
23f10 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
23f20 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
23f30 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29  C->uc.pCursor) )
23f40 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 73 71  ;.        v = sq
23f50 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
23f60 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
23f70 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  sor);.        if
23f80 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
23f90 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
23fa0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
23fb0 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
23fc0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
23fd0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
23fe0 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
23ff0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
24000 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
24010 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
24020 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
24030 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
24040 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
24050 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
24060 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
24070 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
24080 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
24090 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
240a0 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
240b0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
240c0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
240d0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
240e0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
240f0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
24100 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
24110 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
24120 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
24130 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
24140 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
24150 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
24160 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
24170 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24180 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
24190 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
241a0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
241b0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
241c0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
241d0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
241e0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
241f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
24200 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
24210 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
24220 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
24230 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
24240 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
24250 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
24260 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
24270 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Mem);.      sqli
24280 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
24290 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
242a0 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
242b0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
242c0 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
242d0 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
242e0 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66  eger */.      if
242f0 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
24300 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
24310 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
24320 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
24330 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
24340 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30 36 33  MP: R-17817-0063
24350 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  0 */.        got
24360 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24370 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
24380 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
24390 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
243a0 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
243b0 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
243c0 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b    pMem->u.i = v;
243d0 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
243e0 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
243f0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
24400 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
24410 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
24420 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
24430 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
24440 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
24450 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
24460 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
24470 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
24480 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
24490 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
244a0 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
244b0 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
244c0 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
244d0 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
244e0 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
244f0 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
24500 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
24510 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
24520 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
24530 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
24540 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
24550 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
24560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
24580 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
24590 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
245a0 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20    cnt = 0;.     
245b0 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c   do{.        sql
245c0 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
245d0 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
245e0 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41          v &= (MA
245f0 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b  X_ROWID>>1); v++
24600 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61  ;  /* Ensure tha
24610 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74  t v is greater t
24620 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  han zero */.    
24630 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20    }while(  ((rc 
24640 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
24650 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
24660 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
24670 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
246b0 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
246c0 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
246d0 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
246e0 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
246f0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ));.      if( rc
24700 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
24710 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
24720 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
24730 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
24740 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
24750 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
24760 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
24770 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24780 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
24790 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
247a0 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
247b0 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
247c0 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
247d0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
247e0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
247f0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
24800 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
24810 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
24820 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
24830 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
24840 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
24850 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
24860 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
24870 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
24880 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
24890 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
248a0 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
248b0 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
248c0 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
248d0 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
248e0 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
248f0 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
24900 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
24910 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
24920 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
24930 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
24940 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
24950 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
24960 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
24970 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
24980 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
24990 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
249a0 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
249b0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
249c0 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
249d0 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
249e0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
249f0 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
24a00 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
24a10 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
24a20 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
24a30 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
24a40 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
24a50 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
24a60 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
24a70 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
24a80 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
24a90 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
24aa0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
24ab0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
24ac0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
24ad0 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
24ae0 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66  n might.** run f
24af0 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e  aster by avoidin
24b00 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79  g an unnecessary
24b10 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20   seek on cursor 
24b20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a  P1.  However,.**
24b30 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
24b40 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d  EEKRESULT flag m
24b50 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  ust only be set 
24b60 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62 65  if there have be
24b70 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73  en no prior.** s
24b80 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73  eeks on the curs
24b90 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73  or or if the mos
24ba0 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73  t recent seek us
24bb0 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c 20 74  ed a key equal t
24bc0 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P3..**.** If t
24bd0 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
24be0 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
24bf0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
24c00 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
24c10 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
24c20 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
24c30 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
24c40 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
24c50 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
24c60 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
24c70 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
24c80 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
24c90 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
24ca0 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
24cb0 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
24cc0 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
24cd0 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63  to a Table struc
24ce0 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20  ture, or may be 
24cf0 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a  NULL. If it is .
24d00 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  ** not NULL, the
24d10 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
24d20 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  k (sqlite3.xUpda
24d30 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
24d40 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f  nvoked .** follo
24d50 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
24d60 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
24d70 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
24d80 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
24d90 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
24da0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
24db0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
24dc0 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
24dd0 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
24de0 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
24df0 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
24e00 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
24e10 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
24e20 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
24e30 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
24e40 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
24e50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
24e60 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
24e70 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
24e80 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
24e90 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
24ea0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
24eb0 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
24ec0 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
24ed0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
24ee0 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
24ef0 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
24f00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
24f10 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
24f20 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
24f30 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61  : intkey=P3 data
24f40 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P2].**.** Thi
24f50 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
24f60 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
24f70 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
24f80 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
24f90 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
24fa0 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
24fb0 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
24fc0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
24fd0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
24fe0 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
24ff0 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
25000 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
25010 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
25020 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
25030 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
25040 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
25050 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
25060 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
25070 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
25080 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43  ecord */.  VdbeC
25090 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20  ursor *pC;   /* 
250a0 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20  Cursor to table 
250b0 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72  into which inser
250c0 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a  t is written */.
250d0 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
250e0 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
250f0 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
25100 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
25110 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
25120 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
25130 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
25140 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
25150 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
25160 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
25170 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75     /* Table stru
25180 63 74 75 72 65 20 2d 20 75 73 65 64 20 62 79 20  cture - used by 
25190 75 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75  update and pre-u
251a0 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20  pdate hooks */. 
251b0 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20   int op;        
251c0 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72     /* Opcode for
251d0 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51   update hook: SQ
251e0 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53  LITE_UPDATE or S
251f0 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a  QLITE_INSERT */.
25200 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78    BtreePayload x
25210 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74  ;   /* Payload t
25220 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
25230 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20 20 70 44  ..  op = 0;.  pD
25240 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  ata = &aMem[pOp-
25250 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
25260 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25270 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25280 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
25290 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20  mIsValid(pData) 
252a0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
252b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
252c0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
252d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
252e0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
252f0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
25300 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
25310 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
25320 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
25330 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70  LAG_ISNOOP) || p
25340 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
25350 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25360 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c  ype==P4_TABLE ||
25370 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34   pOp->p4type>=P4
25380 5f 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47  _STATIC );.  REG
25390 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
253a0 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
253b0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
253c0 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
253d0 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
253e0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
253f0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
25400 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
25410 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
25420 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20  alid(pKey) );.  
25430 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
25440 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
25450 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b  .    x.nKey = pK
25460 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65  ey->u.i;.  }else
25470 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
25480 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
25490 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 78  sertInt );.    x
254a0 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b  .nKey = pOp->p3;
254b0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
254c0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
254d0 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f  E && HAS_UPDATE_
254e0 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20  HOOK(db) ){.    
254f0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
25500 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20  =0 );.    zDb = 
25510 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
25520 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70  .zDbSName;.    p
25530 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
25540 61 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ab;.    assert( 
25550 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
25560 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 48 61 73  G_ISNOOP) || Has
25570 52 6f 77 69 64 28 70 54 61 62 29 20 29 3b 0a 20  Rowid(pTab) );. 
25580 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
25590 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
255a0 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
255b0 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
255c0 53 45 52 54 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  SERT);.  }else{.
255d0 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20 2f 2a      pTab = 0; /*
255e0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
255f0 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
25600 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
25610 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   zDb = 0;  /* No
25620 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
25630 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
25640 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
25650 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25660 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
25670 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
25680 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  he pre-update ho
25690 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ok, if any */.  
256a0 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
256b0 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20 20 26  teCallback .   &
256c0 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  & pOp->p4type==P
256d0 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20 21 28  4_TABLE.   && !(
256e0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
256f0 5f 49 53 55 50 44 41 54 45 29 0a 20 20 29 7b 0a  _ISUPDATE).  ){.
25700 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
25710 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
25720 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  pC, SQLITE_INSER
25730 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e  T, zDb, pTab, x.
25740 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  nKey, pOp->p2);.
25750 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
25760 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  5 & OPFLAG_ISNOO
25770 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  P ) break;.#endi
25780 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  f..  if( pOp->p5
25790 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
257a0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
257b0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
257c0 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  & OPFLAG_LASTROW
257d0 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77  ID ) db->lastRow
257e0 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 69  id = x.nKey;.  i
257f0 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
25800 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
25810 20 20 78 2e 70 44 61 74 61 20 3d 20 30 3b 0a 20    x.pData = 0;. 
25820 20 20 20 78 2e 6e 44 61 74 61 20 3d 20 30 3b 0a     x.nData = 0;.
25830 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
25840 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67  ert( pData->flag
25850 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  s & (MEM_Blob|ME
25860 4d 5f 53 74 72 29 20 29 3b 0a 20 20 20 20 78 2e  M_Str) );.    x.
25870 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a  pData = pData->z
25880 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d 20  ;.    x.nData = 
25890 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 7d 0a 20 20  pData->n;.  }.  
258a0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70  seekResult = ((p
258b0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
258c0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f  USESEEKRESULT) ?
258d0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
258e0 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74  : 0);.  if( pDat
258f0 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  a->flags & MEM_Z
25900 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65  ero ){.    x.nZe
25910 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a  ro = pData->u.nZ
25920 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ero;.  }else{.  
25930 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20    x.nZero = 0;. 
25940 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b   }.  x.pKey = 0;
25950 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
25960 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
25970 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20  c.pCursor, &x,. 
25980 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
25990 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f  (OPFLAG_APPEND|O
259a0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
259b0 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73 75 6c 74  ON)), seekResult
259c0 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65  .  );.  pC->defe
259d0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
259e0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
259f0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25a00 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
25a10 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
25a20 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
25a30 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
25a40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
25a50 3b 0a 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64  ;.  if( db->xUpd
25a60 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f  ateCallback && o
25a70 70 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70  p ){.    db->xUp
25a80 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
25a90 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
25aa0 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
25ab0 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a  e, x.nKey);.  }.
25ac0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25ad0 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
25ae0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
25af0 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65  ** Delete the re
25b00 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68  cord at which th
25b10 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63  e P1 cursor is c
25b20 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
25b30 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  g..**.** If the 
25b40 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
25b50 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20 50  ION bit of the P
25b60 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73  5 parameter is s
25b70 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  et, then.** the 
25b80 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c  cursor will be l
25b90 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
25ba0 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74   either the next
25bb0 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73   or the previous
25bc0 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68  .** record in th
25bd0 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69  e table. If it i
25be0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
25bf0 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f  at the next reco
25c00 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  rd, then.** the 
25c10 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75  next Next instru
25c20 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20  ction will be a 
25c30 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75  no-op. As a resu
25c40 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65  lt, in this case
25c50 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f 20  .** it is ok to 
25c60 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20  delete a record 
25c70 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65  from within a Ne
25c80 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20  xt loop. If .** 
25c90 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
25ca0 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69 73  ION bit of P5 is
25cb0 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68 65   clear, then the
25cc0 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a   cursor will be.
25cd0 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e  ** left in an un
25ce0 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a  defined state..*
25cf0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
25d00 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69 74  AG_AUXDELETE bit
25d10 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20 74   is set on P5, t
25d20 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
25d30 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74  at this.** delet
25d40 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61 6c  e one of several
25d50 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
25d60 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62 6c   deleting a tabl
25d70 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74  e row and all it
25d80 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
25d90 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20 20  index entries.  
25da0 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
25db0 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73 20  hose deletes is 
25dc0 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a  the "primary".**
25dd0 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f 74   delete.  The ot
25de0 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20  hers are all on 
25df0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
25e00 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73 65   cursors or else
25e10 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77   are.** marked w
25e20 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45 54  ith the AUXDELET
25e30 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66  E flag..**.** If
25e40 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
25e50 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 28  NGE flag of P2 (
25e60 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20 69  NB: P2 not P5) i
25e70 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
25e80 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  row.** change co
25e90 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
25ea0 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
25eb0 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  t)..**.** P1 mus
25ec0 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d  t not be pseudo-
25ed0 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74  table.  It has t
25ee0 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c  o be a real tabl
25ef0 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70  e with.** multip
25f00 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49  le rows..**.** I
25f10 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
25f20 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20   then it points 
25f30 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65 63  to a Table objec
25f40 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  t. In this case 
25f50 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75  either .** the u
25f60 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64  pdate or pre-upd
25f70 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74  ate hook, or bot
25f80 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65  h, may be invoke
25f90 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  d. The P1 cursor
25fa0 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65   must.** have be
25fb0 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73  en positioned us
25fc0 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  ing OP_NotFound 
25fd0 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e  prior to invokin
25fe0 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  g this opcode in
25ff0 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20   .** this case. 
26000 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66  Specifically, if
26010 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
26020 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61  ed, the pre-upda
26030 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69  te hook is .** i
26040 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20  nvoked if P4 is 
26050 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70  not NULL. The up
26060 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76  date-hook is inv
26070 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63  oked if one is c
26080 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50  onfigured, .** P
26090 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61  4 is not NULL, a
260a0 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  nd the OPFLAG_NC
260b0 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65  HANGE flag is se
260c0 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  t in P2..**.** I
260d0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
260e0 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
260f0 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33  t in P2, then P3
26100 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
26110 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20  dress.** of the 
26120 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
26130 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61   contains the va
26140 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f 77  lue that the row
26150 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69  id of the row wi
26160 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20  ll.** be set to 
26170 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a  by the update..*
26180 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65  /.case OP_Delete
26190 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
261a0 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *pC;.  const ch
261b0 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65  ar *zDb;.  Table
261c0 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70   *pTab;.  int op
261d0 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67  flags;..  opflag
261e0 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  s = pOp->p2;.  a
261f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26200 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26210 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
26220 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26230 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
26240 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
26250 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
26260 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
26270 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
26280 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
26290 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
262a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
262b0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
262c0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
262d0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
262e0 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64 28  BLE && HasRowid(
262f0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26  pOp->p4.pTab) &&
26300 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20   pOp->p5==0 ){. 
26310 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a     /* If p5 is z
26320 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70  ero, the seek op
26330 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
26340 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
26350 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20  or prior to.    
26360 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c  ** OP_Delete wil
26370 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20  l have also set 
26380 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  the pC->movetoTa
26390 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68  rget field to th
263a0 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a  e rowid of.    *
263b0 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 69  * the row that i
263c0 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  s being deleted 
263d0 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20  */.    i64 iKey 
263e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
263f0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
26400 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73  pCursor);.    as
26410 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f  sert( pC->moveto
26420 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a  Target==iKey );.
26430 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
26440 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68   If the update-h
26450 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74  ook or pre-updat
26460 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e-hook will be i
26470 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62 20  nvoked, set zDb 
26480 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65  to.  ** the name
26490 20 6f 66 20 74 68 65 20 64 62 20 74 6f 20 70 61   of the db to pa
264a0 73 73 20 61 73 20 74 6f 20 69 74 2e 20 41 6c 73  ss as to it. Als
264b0 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70 54 61 62  o set local pTab
264c0 20 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20   to a copy.  ** 
264d0 6f 66 20 70 34 2e 70 54 61 62 2e 20 46 69 6e 61  of p4.pTab. Fina
264e0 6c 6c 79 2c 20 69 66 20 70 35 20 69 73 20 74 72  lly, if p5 is tr
264f0 75 65 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ue, indicating t
26500 68 61 74 20 74 68 69 73 20 63 75 72 73 6f 72 20  hat this cursor 
26510 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f  was.  ** last mo
26520 76 65 64 20 77 69 74 68 20 4f 50 5f 4e 65 78 74  ved with OP_Next
26530 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74   or OP_Prev, not
26540 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e   Seek or NotFoun
26550 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56 64 62  d, set .  ** Vdb
26560 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61  eCursor.movetoTa
26570 72 67 65 74 20 74 6f 20 74 68 65 20 63 75 72 72  rget to the curr
26580 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20  ent rowid.  */. 
26590 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
265a0 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41  ==P4_TABLE && HA
265b0 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62  S_UPDATE_HOOK(db
265c0 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
265d0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
265e0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
265f0 70 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20 20  p4.pTab!=0 );.  
26600 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
26610 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  pC->iDb].zDbSNam
26620 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f  e;.    pTab = pO
26630 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20  p->p4.pTab;.    
26640 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
26650 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
26660 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e 69 73  ON)!=0 && pC->is
26670 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70  Table ){.      p
26680 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
26690 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
266a0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
266b0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
266c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62    }else{.    zDb
266d0 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e   = 0;   /* Not n
266e0 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
266f0 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
26700 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20  ng. */.    pTab 
26710 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
26720 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
26730 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
26740 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66  . */.  }..#ifdef
26750 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
26760 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
26770 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
26780 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e-update-hook if
26790 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
267a0 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
267b0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
267c0 70 2d 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20 20  p->p4.pTab ){.  
267d0 20 20 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c    assert( !(opfl
267e0 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  ags & OPFLAG_ISU
267f0 50 44 41 54 45 29 20 0a 20 20 20 20 20 20 20 20  PDATE) .        
26800 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61   || HasRowid(pTa
26810 62 29 3d 3d 30 20 0a 20 20 20 20 20 20 20 20 20  b)==0 .         
26820 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  || (aMem[pOp->p3
26830 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ].flags & MEM_In
26840 74 29 20 0a 20 20 20 20 29 3b 0a 20 20 20 20 73  t) .    );.    s
26850 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64  qlite3VdbePreUpd
26860 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20  ateHook(p, pC,. 
26870 20 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20         (opflags 
26880 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
26890 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
268a0 54 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45  TE : SQLITE_DELE
268b0 54 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62  TE, .        zDb
268c0 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65  , pTab, pC->move
268d0 74 6f 54 61 72 67 65 74 2c 0a 20 20 20 20 20 20  toTarget,.      
268e0 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b    pOp->p3.    );
268f0 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61  .  }.  if( opfla
26900 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  gs & OPFLAG_ISNO
26910 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64  OP ) break;.#end
26920 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66  if. .  /* Only f
26930 6c 61 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  lags that can be
26940 20 73 65 74 20 61 72 65 20 53 41 56 45 50 4f 49   set are SAVEPOI
26950 53 54 49 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c  STION and AUXDEL
26960 45 54 45 20 2a 2f 20 0a 20 20 61 73 73 65 72 74  ETE */ .  assert
26970 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f  ( (pOp->p5 & ~(O
26980 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
26990 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  ON|OPFLAG_AUXDEL
269a0 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  ETE))==0 );.  as
269b0 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 41 56  sert( OPFLAG_SAV
269c0 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45  EPOSITION==BTREE
269d0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b  _SAVEPOSITION );
269e0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
269f0 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d 42 54 52  G_AUXDELETE==BTR
26a00 45 45 5f 41 55 58 44 45 4c 45 54 45 20 29 3b 0a  EE_AUXDELETE );.
26a10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26a20 45 42 55 47 0a 20 20 69 66 28 20 70 2d 3e 70 46  EBUG.  if( p->pF
26a30 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69  rame==0 ){.    i
26a40 66 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  f( pC->isEphemer
26a50 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26  al==0.        &&
26a60 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
26a70 41 47 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d 30  AG_AUXDELETE)==0
26a80 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 43 2d  .        && (pC-
26a90 3e 77 72 46 6c 61 67 20 26 20 4f 50 46 4c 41 47  >wrFlag & OPFLAG
26aa0 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20  _FORDELETE)==0. 
26ab0 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 6e 45       ){.      nE
26ac0 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20  xtraDelete++;.  
26ad0 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d    }.    if( pOp-
26ae0 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
26af0 41 4e 47 45 20 29 7b 0a 20 20 20 20 20 20 6e 45  ANGE ){.      nE
26b00 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20  xtraDelete--;.  
26b10 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
26b20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
26b30 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 75 63  reeDelete(pC->uc
26b40 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70  .pCursor, pOp->p
26b50 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  5);.  pC->cacheS
26b60 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26b70 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ALE;.  pC->seekR
26b80 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28  esult = 0;.  if(
26b90 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
26ba0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
26bb0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
26bc0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
26bd0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
26be0 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
26bf0 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
26c00 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
26c10 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64      if( db->xUpd
26c20 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48  ateCallback && H
26c30 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b  asRowid(pTab) ){
26c40 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61  .      db->xUpda
26c50 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
26c60 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
26c70 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70  E_DELETE, zDb, p
26c80 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
26c90 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f        pC->moveto
26ca0 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61  Target);.      a
26cb0 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
26cc0 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  0 );.    }.  }..
26cd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
26ce0 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
26cf0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
26d00 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
26d10 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
26d20 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
26d30 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
26d40 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
26d50 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
26d60 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
26d70 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
26d80 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
26d90 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
26da0 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
26db0 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
26dc0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
26dd0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
26de0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
26df0 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
26e00 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
26e10 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
26e20 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
26e30 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
26e40 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
26e50 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
26e60 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
26e70 73 69 73 3a 20 69 66 20 6b 65 79 28 50 31 29 21  sis: if key(P1)!
26e80 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20  =trim(r[P3],P4) 
26e90 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  goto P2.**.** P1
26ea0 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
26eb0 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75  sor. This instru
26ec0 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61  ction compares a
26ed0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a   prefix of the.*
26ee0 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e  * record blob in
26ef0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61   register P3 aga
26f00 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  inst a prefix of
26f10 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
26f20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63  .** the sorter c
26f30 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20  ursor currently 
26f40 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79  points to.  Only
26f50 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69   the first P4 fi
26f60 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d  elds.** of r[P3]
26f70 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20   and the sorter 
26f80 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61  record are compa
26f90 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69  red..**.** If ei
26fa0 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73  ther P3 or the s
26fb0 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61  orter contains a
26fc0 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20   NULL in one of 
26fd0 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e  their significan
26fe0 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74  t.** fields (not
26ff0 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34   counting the P4
27000 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
27010 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e  nd which are ign
27020 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68  ored) then.** th
27030 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
27040 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71  assumed to be eq
27050 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20  ual..**.** Fall 
27060 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20  through to next 
27070 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74  instruction if t
27080 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63  he two records c
27090 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a  ompare equal to.
270a0 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  ** each other.  
270b0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
270c0 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  ey are different
270d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
270e0 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  terCompare: {.  
270f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27100 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
27110 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20   nKeyCol;..  pC 
27120 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27130 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
27140 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
27150 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
27160 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
27170 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
27180 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65  [pOp->p3];.  nKe
27190 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  yCol = pOp->p4.i
271a0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
271b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
271c0 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c  orterCompare(pC,
271d0 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20   pIn3, nKeyCol, 
271e0 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61  &res);.  VdbeBra
271f0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
27200 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
27210 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27220 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
27230 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
27240 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  _p2;.  break;.};
27250 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
27260 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33  terData P1 P2 P3
27270 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
27280 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
27290 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
272a0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
272b0 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
272c0 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
272d0 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20  sor P1..** Then 
272e0 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e  clear the column
272f0 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e   header cache on
27300 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a   cursor P3..**.*
27310 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
27320 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f   normally use to
27330 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f   move a record o
27340 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72  ut of the sorter
27350 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72   and into.** a r
27360 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20  egister that is 
27370 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61  the source for a
27380 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
27390 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69  rsor created usi
273a0 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f  ng.** OpenPseudo
273b0 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74  .  That pseudo-t
273c0 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74  able cursor is t
273d0 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69  he one that is i
273e0 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20  dentified by.** 
273f0 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43  parameter P3.  C
27400 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63  learing the P3 c
27410 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70  olumn cache as p
27420 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  art of this opco
27430 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66  de saves.** us f
27440 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73  rom having to is
27450 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e  sue a separate N
27460 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69  ullRow instructi
27470 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74  on to clear that
27480 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20   cache..*/.case 
27490 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
274a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
274b0 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
274c0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
274d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
274e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
274f0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
27500 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27510 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
27520 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73  pC, pOut);.  ass
27530 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f  ert( rc!=SQLITE_
27540 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61  OK || (pOut->fla
27550 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29  gs & MEM_Blob) )
27560 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27570 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
27580 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
27590 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
275a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
275b0 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  or;.  p->apCsr[p
275c0 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74  Op->p3]->cacheSt
275d0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
275e0 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
275f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
27600 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ta P1 P2 P3 * *.
27610 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
27620 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
27630 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
27640 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
27650 65 20 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f  e row content fo
27660 72 20 74 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a  r the row at .**
27670 20 77 68 69 63 68 20 63 75 72 73 6f 72 20 50 31   which cursor P1
27680 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
27690 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65  inting..** There
276a0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
276b0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
276c0 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
276d0 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
276e0 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
276f0 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
27700 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
27710 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
27720 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
27730 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2c 20  P1 is an index, 
27740 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
27750 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
27760 68 65 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75  he row..** If cu
27770 72 73 6f 72 20 50 32 20 69 73 20 61 20 74 61 62  rsor P2 is a tab
27780 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e  le, then the con
27790 74 65 6e 74 20 65 78 74 72 61 63 74 65 64 20 69  tent extracted i
277a0 73 20 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a  s the data..**.*
277b0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
277c0 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
277d0 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
277e0 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
277f0 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
27800 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
27810 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
27820 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20  * If P3!=0 then 
27830 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61  this opcode is a
27840 6c 6c 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20 61  llowed to make a
27850 6e 20 65 70 68 65 72 6d 65 72 61 6c 20 70 6f 69  n ephermeral poi
27860 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65  nter.** into the
27870 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2e 20   database page. 
27880 20 54 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   That means that
27890 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
278a0 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65  the output.** re
278b0 67 69 73 74 65 72 20 77 69 6c 6c 20 62 65 20 69  gister will be i
278c0 6e 76 61 6c 69 64 61 74 65 64 20 61 73 20 73 6f  nvalidated as so
278d0 6f 6e 20 61 73 20 74 68 65 20 63 75 72 73 6f 72  on as the cursor
278e0 20 6d 6f 76 65 73 20 2d 20 69 6e 63 6c 75 64 69   moves - includi
278f0 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73  ng.** moves caus
27900 65 64 20 62 79 20 6f 74 68 65 72 20 63 75 72 73  ed by other curs
27910 6f 72 73 20 74 68 61 74 20 22 73 61 76 65 22 20  ors that "save" 
27920 74 68 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  the the current 
27930 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73 69 74  cursors.** posit
27940 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74 68 61  ion in order tha
27950 74 20 74 68 65 79 20 63 61 6e 20 77 72 69 74 65  t they can write
27960 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62   to the same tab
27970 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a 2a 2a  le.  If P3==0.**
27980 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f 66 20   then a copy of 
27990 74 68 65 20 64 61 74 61 20 69 73 20 6d 61 64 65  the data is made
279a0 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20 20 50   into memory.  P
279b0 33 21 3d 30 20 69 73 20 66 61 73 74 65 72 2c 20  3!=0 is faster, 
279c0 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20  but.** P3==0 is 
279d0 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  safer..**.** If 
279e0 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63  P3!=0 then the c
279f0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 50 32  ontent of the P2
27a00 20 72 65 67 69 73 74 65 72 20 69 73 20 75 6e 73   register is uns
27a10 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73 65 0a  uitable for use.
27a20 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c 74 20  ** in OP_Result 
27a30 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73 75 6c  and any OP_Resul
27a40 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74  t will invalidat
27a50 65 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  e the P2 registe
27a60 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68  r content..** Th
27a70 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63 6f  e P2 register co
27a80 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c 69 64  ntent is invalid
27a90 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65 73 20  ated by opcodes 
27aa0 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  like OP_Function
27ab0 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20 75 73   or.** by any us
27ac0 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63 75 72  e of another cur
27ad0 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
27ae0 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a  the same table..
27af0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61  */.case OP_RowDa
27b00 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
27b10 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
27b20 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32  or *pCrsr;.  u32
27b30 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75   n;..  pOut = ou
27b40 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
27b50 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  pOp);..  assert(
27b60 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27b70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27b80 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
27b90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27ba0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
27bb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27bc0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
27bd0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
27be0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
27bf0 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
27c00 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30  ( pC->nullRow==0
27c10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
27c20 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
27c30 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
27c40 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20  >uc.pCursor;..  
27c50 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44 61 74  /* The OP_RowDat
27c60 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73  a opcodes always
27c70 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78   follow OP_NotEx
27c80 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f  ists or.  ** OP_
27c90 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f  SeekRowid or OP_
27ca0 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77  Rewind/Op_Next w
27cb0 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69  ith no interveni
27cc0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a  ng instructions.
27cd0 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74 20    ** that might 
27ce0 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63  invalidate the c
27cf0 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74  ursor..  ** If t
27d00 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68  his where not th
27d10 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68  e case, on of th
27d20 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65  e following asse
27d30 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64  rt()s.  ** would
27d40 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74   fail.  Should t
27d50 68 69 73 20 65 76 65 72 20 63 68 61 6e 67 65 20  his ever change 
27d60 28 62 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e  (because of chan
27d70 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a  ges in the code.
27d80 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20    ** generator) 
27d90 74 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75  then the fix wou
27da0 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20  ld be to insert 
27db0 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  a call to.  ** s
27dc0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
27dd0 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20  Moveto()..  */. 
27de0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
27df0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27e00 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
27e10 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
27e20 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
27e30 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65  #if 0  /* Not re
27e40 71 75 69 72 65 64 20 64 75 65 20 74 6f 20 74 68  quired due to th
27e50 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73  e previous to as
27e60 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
27e70 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  s */.  rc = sqli
27e80 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
27e90 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72  eto(pC);.  if( r
27ea0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
27eb0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27ec0 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
27ed0 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74 72    n = sqlite3Btr
27ee0 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43  eePayloadSize(pC
27ef0 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75  rsr);.  if( n>(u
27f00 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
27f10 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
27f20 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
27f30 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65  oo_big;.  }.  te
27f40 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a  stcase( n==0 );.
27f50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27f60 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
27f70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74  Crsr, 0, n, pOut
27f80 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
27f90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27fa0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21 70 4f  error;.  if( !pO
27fb0 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65 6d 65  p->p3 ) Deepheme
27fc0 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
27fd0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
27fe0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
27ff0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
28000 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
28010 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28020 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
28030 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
28040 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
28050 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
28060 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
28070 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
28080 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
28090 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
280a0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
280b0 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
280c0 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
280d0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
280e0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
280f0 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
28100 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
28110 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
28120 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
28130 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
28140 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
28150 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
28160 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
28170 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
28180 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281a0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
281b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
281c0 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
281d0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
281e0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
281f0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
28200 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
28210 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
28220 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28230 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28240 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28250 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28260 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28270 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
28280 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
28290 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
282a0 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
282b0 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
282c0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
282d0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
282e0 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
282f0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
28300 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
28310 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
28320 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
28330 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28340 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
28350 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75  else if( pC->eCu
28360 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
28370 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72  TAB ){.    asser
28380 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21  t( pC->uc.pVCur!
28390 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20  =0 );.    pVtab 
283a0 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  = pC->uc.pVCur->
283b0 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
283c0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
283d0 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
283e0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
283f0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
28400 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
28410 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a  >uc.pVCur, &v);.
28420 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
28430 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
28440 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
28450 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28460 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
28470 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
28480 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
28490 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
284a0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
284b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
284c0 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
284d0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
284e0 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
284f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
28500 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20  orRestore(pC);. 
28510 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
28520 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
28530 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
28540 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
28550 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
28560 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
28570 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
28580 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
28590 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
285a0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
285b0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
285c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
285d0 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
285e0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
285f0 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
28600 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
28610 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
28620 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
28630 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
28640 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
28650 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
28660 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
28670 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
28680 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
28690 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
286a0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
286b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
286c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
286d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
286e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
286f0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
28700 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
28710 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   1;.  pC->cacheS
28720 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
28730 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65  ALE;.  if( pC->e
28740 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
28750 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73  _BTREE ){.    as
28760 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
28770 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73  rsor!=0 );.    s
28780 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
28790 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
287a0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
287b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
287c0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50 33  e: Last P1 P2 P3
287d0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
287e0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
287f0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
28800 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
28810 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
28820 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
28830 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
28840 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
28850 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
28860 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
28870 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
28880 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
28890 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
288a0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
288b0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
288c0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
288d0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
288e0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
288f0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
28900 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
28910 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
28920 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
28930 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
28940 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
28950 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
28960 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
28970 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
28980 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
28990 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
289a0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
289b0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
289c0 49 66 20 50 33 20 69 73 20 2d 31 2c 20 74 68 65  If P3 is -1, the
289d0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
289e0 70 6f 73 69 74 69 6f 6e 65 64 20 61 74 20 74 68  positioned at th
289f0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72  e end of the btr
28a00 65 65 0a 2a 2a 20 66 6f 72 20 74 68 65 20 70 75  ee.** for the pu
28a10 72 70 6f 73 65 20 6f 66 20 61 70 70 65 6e 64 69  rpose of appendi
28a20 6e 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f  ng a new entry o
28a30 6e 74 6f 20 74 68 65 20 62 74 72 65 65 2e 20 20  nto the btree.  
28a40 49 6e 20 74 68 61 74 0a 2a 2a 20 63 61 73 65 20  In that.** case 
28a50 50 32 20 6d 75 73 74 20 62 65 20 30 2e 20 20 49  P2 must be 0.  I
28a60 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  t is assumed tha
28a70 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  t the cursor is 
28a80 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 0a 2a 2a  used only for.**
28a90 20 61 70 70 65 6e 64 69 6e 67 20 61 6e 64 20 73   appending and s
28aa0 6f 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  o if the cursor 
28ab0 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20 74  is valid, then t
28ac0 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 61  he cursor must a
28ad0 6c 72 65 61 64 79 0a 2a 2a 20 62 65 20 70 6f 69  lready.** be poi
28ae0 6e 74 69 6e 67 20 61 74 20 74 68 65 20 65 6e 64  nting at the end
28af0 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 61 6e   of the btree an
28b00 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20  d so no changes 
28b10 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74  are made to.** t
28b20 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 63 61  he cursor..*/.ca
28b30 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
28b40 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
28b50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
28b60 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
28b70 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
28b80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28b90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
28ba0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
28bb0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28bc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28bd0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
28be0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
28bf0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
28c00 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
28c10 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
28c20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
28c30 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
28c40 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
28c50 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64   = pOp->p3;.#ifd
28c60 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
28c70 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f    pC->seekOp = O
28c80 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20  P_Last;.#endif. 
28c90 20 69 66 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20   if( pOp->p3==0 
28ca0 7c 7c 20 21 73 71 6c 69 74 65 33 42 74 72 65 65  || !sqlite3Btree
28cb0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e 28  CursorIsValidNN(
28cc0 70 43 72 73 72 29 20 29 7b 0a 20 20 20 20 72 63  pCrsr) ){.    rc
28cd0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
28ce0 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
28cf0 3b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  ;.    pC->nullRo
28d00 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 20  w = (u8)res;.   
28d10 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
28d20 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d  eto = 0;.    pC-
28d30 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28d40 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
28d50 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
28d60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
28d70 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
28d80 32 3e 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62  2>0 ){.      Vdb
28d90 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
28da0 21 3d 30 2c 32 29 3b 0a 20 20 20 20 20 20 69 66  !=0,2);.      if
28db0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
28dc0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
28dd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
28de0 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  rt( pOp->p2==0 )
28df0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28e00 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53  ../* Opcode: IfS
28e10 6d 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33 20  maller P1 P2 P3 
28e20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61  * *.**.** Estima
28e30 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
28e40 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
28e50 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20  le P1.  Jump to 
28e60 50 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65 73  P2 if that.** es
28e70 74 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20 74  timate is less t
28e80 68 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c  han approximatel
28e90 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a  y 2**(0.1*P3)..*
28ea0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c  /.case OP_IfSmal
28eb0 6c 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ler: {        /*
28ec0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
28ed0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
28ee0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
28ef0 69 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20 73  int res;.  i64 s
28f00 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  z;..  assert( pO
28f10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28f20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28f30 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
28f40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28f50 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
28f60 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
28f70 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
28f80 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72 63  t( pCrsr );.  rc
28f90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
28fa0 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
28fb0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
28fc0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28fd0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
28fe0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20  ==0 ){.    sz = 
28ff0 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77 43  sqlite3BtreeRowC
29000 6f 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b 0a  ountEst(pCrsr);.
29010 20 20 20 20 69 66 28 20 41 4c 57 41 59 53 28 73      if( ALWAYS(s
29020 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65 33  z>=0) && sqlite3
29030 4c 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29 3c  LogEst((u64)sz)<
29040 70 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d 20  pOp->p3 ) res = 
29050 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  1;.  }.  VdbeBra
29060 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
29070 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
29080 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
29090 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
290a0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 53   Opcode: SorterS
290b0 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
290c0 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20  **.** After all 
290d0 72 65 63 6f 72 64 73 20 68 61 76 65 20 62 65 65  records have bee
290e0 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  n inserted into 
290f0 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65 63  the Sorter objec
29100 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64 20  t.** identified 
29110 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68  by P1, invoke th
29120 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63 74  is opcode to act
29130 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f 72  ually do the sor
29140 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ting..** Jump to
29150 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65   P2 if there are
29160 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20 62   no records to b
29170 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  e sorted..**.** 
29180 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61  This opcode is a
29190 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53  n alias for OP_S
291a0 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e  ort and OP_Rewin
291b0 64 20 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a  d that is used.*
291c0 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a  * for Sorter obj
291d0 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ects..*/./* Opco
291e0 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a  de: Sort P1 P2 *
291f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
29200 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63  opcode does exac
29210 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69  tly the same thi
29220 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20  ng as OP_Rewind 
29230 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69  except that.** i
29240 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20  t increments an 
29250 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f  undocumented glo
29260 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65  bal variable use
29270 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a  d for testing..*
29280 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20  *.** Sorting is 
29290 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20  accomplished by 
292a0 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20  writing records 
292b0 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69  into a sorting i
292c0 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65  ndex,.** then re
292d0 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64  winding that ind
292e0 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69  ex and playing i
292f0 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69  t back from begi
29300 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e  nning to.** end.
29310 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f    We use the OP_
29320 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74  Sort opcode inst
29330 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64  ead of OP_Rewind
29340 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65   to do the.** re
29350 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20  winding so that 
29360 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
29370 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72  ble will be incr
29380 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72  emented and.** r
29390 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
293a0 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68  can determine wh
293b0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
293c0 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a   optimizer is.**
293d0 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d   correctly optim
293e0 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e  izing out sorts.
293f0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
29400 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75  erSort:    /* ju
29410 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  mp */.case OP_So
29420 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  rt: {        /* 
29430 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53  jump */.#ifdef S
29440 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
29450 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b  ite3_sort_count+
29460 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  +;.  sqlite3_sea
29470 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e  rch_count--;.#en
29480 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65  dif.  p->aCounte
29490 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41  r[SQLITE_STMTSTA
294a0 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f  TUS_SORT]++;.  /
294b0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
294c0 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f  nto OP_Rewind */
294d0 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
294e0 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  wind P1 P2 * * *
294f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
29500 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
29510 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65   or Column or Ne
29520 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  xt instruction f
29530 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
29540 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  efer to the firs
29550 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
29560 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
29570 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
29580 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
29590 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20   is empty, jump 
295a0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
295b0 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  2..** If the tab
295c0 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e  le or index is n
295d0 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74  ot empty, fall t
295e0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f  hrough to the fo
295f0 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74  llowing .** inst
29600 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
29610 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
29620 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
29630 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
29640 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
29650 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
29660 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
29670 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
29680 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
29690 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
296a0 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
296b0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63  , not Prev..*/.c
296c0 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b  ase OP_Rewind: {
296d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
296e0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
296f0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
29700 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
29710 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  s;..  assert( pO
29720 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29730 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
29740 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
29750 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
29760 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
29770 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
29780 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
29790 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f  ode==OP_SorterSo
297a0 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31  rt) );.  res = 1
297b0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
297c0 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
297d0 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a  Op = OP_Rewind;.
297e0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53  #endif.  if( isS
297f0 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
29800 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
29810 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43  eSorterRewind(pC
29820 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65  , &res);.  }else
29830 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
29840 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
29850 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
29860 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
29870 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73  pCursor;.    ass
29880 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
29890 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
298a0 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
298b0 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64  &res);.    pC->d
298c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
298d0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
298e0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
298f0 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20  TALE;.  }.  if( 
29900 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
29910 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
29920 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
29930 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28  8)res;.  assert(
29940 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
29950 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
29960 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
29970 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
29980 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
29990 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
299a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
299b0 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50   Next P1 P2 P3 P
299c0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  4 P5.**.** Advan
299d0 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  ce cursor P1 so 
299e0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
299f0 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64  o the next key/d
29a00 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a  ata pair in its.
29a10 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
29a20 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
29a30 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c   no more key/val
29a40 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61  ue pairs then fa
29a50 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
29a60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
29a70 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
29a80 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61   if the cursor a
29a90 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65  dvance was succe
29aa0 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69  ssful,.** jump i
29ab0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
29ac0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74  ..**.** The Next
29ad0 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
29ae0 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
29af0 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  an SeekGT, SeekG
29b00 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69  E, or.** OP_Rewi
29b10 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74  nd opcode used t
29b20 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63  o position the c
29b30 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20  ursor.  Next is 
29b40 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74  not allowed.** t
29b50 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c  o follow SeekLT,
29b60 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c   SeekLE, or OP_L
29b70 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ast..**.** The P
29b80 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
29b90 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
29ba0 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
29bb0 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20  table.  P1 must 
29bc0 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65  have.** been ope
29bd0 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69  ned prior to thi
29be0 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20  s opcode or the 
29bf0 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67  program will seg
29c00 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fault..**.** The
29c10 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
29c20 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
29c30 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
29c40 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
29c50 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
29c60 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
29c70 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
29c80 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
29c90 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
29ca0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
29cb0 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
29cc0 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
29cd0 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
29ce0 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
29cf0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
29d00 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
29d10 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
29d20 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
29d30 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
29d40 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a  e3BtreeNext()..*
29d50 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
29d60 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
29d70 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
29d80 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
29d90 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
29da0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
29db0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
29dc0 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
29dd0 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20  See also: Prev, 
29de0 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a  NextIfOpen.*/./*
29df0 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f   Opcode: NextIfO
29e00 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
29e10 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
29e20 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
29e30 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74  like Next except
29e40 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
29e50 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
29e60 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
29e70 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  o-op..*/./* Opco
29e80 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
29e90 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
29ea0 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
29eb0 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
29ec0 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
29ed0 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
29ee0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
29ef0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
29f00 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
29f10 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
29f20 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
29f30 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
29f40 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
29f50 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
29f60 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
29f70 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
29f80 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
29f90 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
29fa0 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
29fb0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
29fc0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
29fd0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
29fe0 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
29ff0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
2a000 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
2a010 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
2a020 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
2a030 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
2a040 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
2a050 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
2a060 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
2a070 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
2a080 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
2a090 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
2a0a0 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
2a0b0 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
2a0c0 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
2a0d0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
2a0e0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
2a0f0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
2a100 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
2a110 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
2a120 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
2a130 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
2a140 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
2a150 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
2a160 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
2a170 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
2a180 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
2a190 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
2a1a0 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
2a1b0 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
2a1c0 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
2a1d0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
2a1e0 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
2a1f0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
2a200 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2a210 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
2a220 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2a230 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2a240 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2a250 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2a260 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2a270 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2a280 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2a290 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
2a2a0 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  evIfOpen P1 P2 P
2a2b0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
2a2c0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
2a2d0 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65  just like Prev e
2a2e0 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
2a2f0 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
2a300 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
2a310 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a  s a no-op..*/./*
2a320 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4e   Opcode: SorterN
2a330 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35  ext P1 P2 * * P5
2a340 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2a350 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
2a360 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65 70  ke OP_Next excep
2a370 74 20 74 68 61 74 20 50 31 20 6d 75 73 74 20 62  t that P1 must b
2a380 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f 62  e a.** sorter ob
2a390 6a 65 63 74 20 66 6f 72 20 77 68 69 63 68 20 74  ject for which t
2a3a0 68 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  he OP_SorterSort
2a3b0 20 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65 6e   opcode has been
2a3c0 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68  .** invoked.  Th
2a3d0 69 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e 63  is opcode advanc
2a3e0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 74 6f  es the cursor to
2a3f0 20 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65 64   the next sorted
2a400 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 6a  .** record, or j
2a410 75 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74 68  umps to P2 if th
2a420 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
2a430 73 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e 0a  sorted records..
2a440 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2a450 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d  rNext: {  /* jum
2a460 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2a470 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
2a480 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
2a490 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2a4a0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
2a4b0 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  pC) );.  res = 0
2a4c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2a4d0 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
2a4e0 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
2a4f0 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a  goto next_tail;.
2a500 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70  case OP_PrevIfOp
2a510 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  en:    /* jump *
2a520 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66  /.case OP_NextIf
2a530 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
2a540 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   */.  if( p->apC
2a550 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29  sr[pOp->p1]==0 )
2a560 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
2a570 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73  l through */.cas
2a580 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20  e OP_Prev:      
2a590 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2a5a0 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20  ase OP_Next:    
2a5b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2a5c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a5d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a5e0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2a5f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2a600 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43  <ArraySize(p->aC
2a610 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20  ounter) );.  pC 
2a620 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a630 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70  p1];.  res = pOp
2a640 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
2a650 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2a660 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2a670 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2a680 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2a690 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2a6a0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  E );.  assert( r
2a6b0 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31  es==0 || (res==1
2a6c0 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d   && pC->isTable=
2a6d0 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73  =0) );.  testcas
2a6e0 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61  e( res==1 );.  a
2a6f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2a700 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
2a710 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
2a720 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
2a730 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
2a740 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
2a750 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  rev || pOp->p4.x
2a760 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
2a770 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b  BtreePrevious );
2a780 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a790 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
2a7a0 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
2a7b0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
2a7c0 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
2a7d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2a7e0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
2a7f0 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
2a800 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
2a810 42 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a  BtreePrevious);.
2a820 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f  .  /* The Next o
2a830 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2a840 65 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c  ed after SeekGT,
2a850 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77   SeekGE, and Rew
2a860 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72  ind..  ** The Pr
2a870 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
2a880 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2a890 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64  kLT, SeekLE, and
2a8a0 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65   Last. */.  asse
2a8b0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2a8c0 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
2a8d0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
2a8e0 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c  IfOpen.       ||
2a8f0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2a900 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65  SeekGT || pC->se
2a910 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a  ekOp==OP_SeekGE.
2a920 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
2a930 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20  ekOp==OP_Rewind 
2a940 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2a950 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65  P_Found);.  asse
2a960 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2a970 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d  =OP_Prev || pOp-
2a980 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
2a990 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c  IfOpen.       ||
2a9a0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2a9b0 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65  SeekLT || pC->se
2a9c0 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a  ekOp==OP_SeekLE.
2a9d0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
2a9e0 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b  ekOp==OP_Last );
2a9f0 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34  ..  rc = pOp->p4
2aa00 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63  .xAdvance(pC->uc
2aa10 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
2aa20 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43  .next_tail:.  pC
2aa30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2aa40 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56  CACHE_STALE;.  V
2aa50 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2aa60 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es==0,2);.  if( 
2aa70 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2aa80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2aa90 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2aaa0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2aab0 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  0;.    p->aCount
2aac0 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
2aad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2aae0 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
2aaf0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
2ab00 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ndif.    goto ju
2ab10 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
2ab20 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2ab30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2ab40 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
2ab50 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
2ab60 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2ab70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2ab80 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
2ab90 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2aba0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
2abb0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
2abc0 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
2abd0 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
2abe0 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
2abf0 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
2ac00 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2ac10 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
2ac20 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78  * into the index
2ac30 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
2ac40 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
2ac50 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
2ac60 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69  not zero, then i
2ac70 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  t is the number 
2ac80 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
2ac90 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79   unpacked.** key
2aca0 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49 6e   of reg(P2).  In
2acb0 20 74 68 61 74 20 63 61 73 65 2c 20 50 33 20 69   that case, P3 i
2acc0 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
2acd0 68 65 20 66 69 72 73 74 20 72 65 67 69 73 74 65  he first registe
2ace0 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e 70  r.** for the unp
2acf0 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65 20  acked key.  The 
2ad00 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66 20  availability of 
2ad10 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79  the unpacked key
2ad20 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a   can sometimes.*
2ad30 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61  * be an optimiza
2ad40 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
2ad50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
2ad60 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65 74 2c  _APPEND bit set,
2ad70 20 74 68 61 74 20 69 73 20 61 20 68 69 6e 74 20   that is a hint 
2ad80 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
2ad90 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  yer.** that this
2ada0 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
2adb0 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
2adc0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
2add0 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
2ade0 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
2adf0 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
2ae00 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
2ae10 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
2ae20 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
2ae30 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
2ae40 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
2ae50 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
2ae60 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2ae70 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
2ae80 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
2ae90 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
2aea0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
2aeb0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
2aec0 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e  ion might.** run
2aed0 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64   faster by avoid
2aee0 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61  ing an unnecessa
2aef0 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f  ry seek on curso
2af00 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a  r P1.  However,.
2af10 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  ** the OPFLAG_US
2af20 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
2af30 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65   must only be se
2af40 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20  t if there have 
2af50 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a  been no prior.**
2af60 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75   seeks on the cu
2af70 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d  rsor or if the m
2af80 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20  ost recent seek 
2af90 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 69 76  used a key equiv
2afa0 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20  alent.** to P2. 
2afb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
2afc0 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
2afd0 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20  ks for indices. 
2afe0 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
2aff0 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
2b000 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f  or tables is OP_
2b010 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
2b020 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73 65  code: SorterInse
2b030 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
2b040 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2b050 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
2b060 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
2b070 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
2b080 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
2b090 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
2b0a0 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
2b0b0 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
2b0c0 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
2b0d0 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20 44  he sorter P1.  D
2b0e0 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
2b0f0 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73  y is nil..*/.cas
2b100 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  e OP_SorterInser
2b110 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  t:       /* in2 
2b120 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
2b130 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
2b140 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
2b150 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72  ursor *pC;.  Btr
2b160 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20  eePayload x;..  
2b170 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2b180 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2b190 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2b1a0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2b1b0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2b1c0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2b1d0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
2b1e0 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
2b1f0 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
2b200 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
2b210 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
2b220 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
2b230 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
2b240 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
2b250 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
2b260 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
2b270 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2b280 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2b290 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  TREE || pOp->opc
2b2a0 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2b2b0 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74  sert );.  assert
2b2c0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
2b2d0 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e   );.  rc = Expan
2b2e0 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69  dBlob(pIn2);.  i
2b2f0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2b300 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2b310 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2b320 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2b330 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ert ){.    rc = 
2b340 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2b350 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29  rWrite(pC, pIn2)
2b360 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
2b370 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b  .nKey = pIn2->n;
2b380 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49  .    x.pKey = pI
2b390 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65  n2->z;.    x.aMe
2b3a0 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e  m = aMem + pOp->
2b3b0 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d  p3;.    x.nMem =
2b3c0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2b3d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b3e0 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
2b3f0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c  >uc.pCursor, &x,
2b400 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e  .         (pOp->
2b410 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50  p5 & (OPFLAG_APP
2b420 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50  END|OPFLAG_SAVEP
2b430 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20  OSITION)), .    
2b440 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20      ((pOp->p5 & 
2b450 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
2b460 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
2b470 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20  Result : 0).    
2b480 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72      );.    asser
2b490 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2b4a0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20  oveto==0 );.    
2b4b0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2b4c0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2b4d0 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74   }.  if( rc) got
2b4e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b4f0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2b500 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
2b510 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
2b520 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2b530 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a   key=r[P2@P3].**
2b540 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  .** The content 
2b550 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20  of P3 registers 
2b560 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69  starting at regi
2b570 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20  ster P2 form.** 
2b580 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2b590 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f  x key. This opco
2b5a0 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20  de removes that 
2b5b0 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a  entry from the .
2b5c0 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20  ** index opened 
2b5d0 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f  by cursor P1..*/
2b5e0 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65  .case OP_IdxDele
2b5f0 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
2b600 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2b610 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2b620 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2b630 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2b640 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
2b650 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2b660 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
2b670 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d  +pOp->p3<=(p->nM
2b680 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
2b690 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  r)+1 );.  assert
2b6a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2b6b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2b6c0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2b6d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2b6e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2b6f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2b700 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2b710 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
2b720 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2b730 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
2b740 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73  pCrsr!=0 );.  as
2b750 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
2b760 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2b770 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2b780 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2b790 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e  16)pOp->p3;.  r.
2b7a0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
2b7b0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
2b7c0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20  [pOp->p2];.  rc 
2b7d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
2b7e0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
2b7f0 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
2b800 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  es);.  if( rc ) 
2b810 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2b820 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
2b830 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  es==0 ){.    rc 
2b840 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
2b850 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45  lete(pCrsr, BTRE
2b860 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20  E_AUXDELETE);.  
2b870 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2b880 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2b890 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  or;.  }.  assert
2b8a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2b8b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d  veto==0 );.  pC-
2b8c0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2b8d0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
2b8e0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
2b8f0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2b900 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31   Opcode: Seek P1
2b910 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79   * P3 P4 *.** Sy
2b920 6e 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50 33 20  nopsis: Move P3 
2b930 74 6f 20 50 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a  to P1.rowid.**.*
2b940 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
2b950 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64  index cursor and
2b960 20 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20   P3 is a cursor 
2b970 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
2b980 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20  ding.** table.  
2b990 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
2b9a0 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
2b9b0 20 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65   of the P3 table
2b9c0 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68   cursor.** to th
2b9d0 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65  e row that corre
2b9e0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75  sponds to the cu
2b9f0 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e  rrent row of P1.
2ba00 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
2ba10 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
2ba20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
2ba30 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
2ba40 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
2ba50 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
2ba60 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
2ba70 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
2ba80 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
2ba90 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
2baa0 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ens..**.** P4 ma
2bab0 79 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66  y be an array of
2bac0 20 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20   integers (type 
2bad0 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e  P4_INTARRAY) con
2bae0 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65  taining.** one e
2baf0 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f  ntry for each co
2bb00 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74  lumn in the P3 t
2bb10 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20  able.  If array 
2bb20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73  entry a(i).** is
2bb30 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2bb40 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  reading column a
2bb50 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f  (i)-1 from curso
2bb60 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69  r P3 is .** equi
2bb70 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72  valent to perfor
2bb80 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65  ming the deferre
2bb90 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20  d seek and then 
2bba0 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69  reading column i
2bbb0 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54   .** from P1.  T
2bbc0 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
2bbd0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20  is stored in P3 
2bbe0 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69  and used to redi
2bbf0 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67  rect.** reads ag
2bc00 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f  ainst P3 over to
2bc10 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62   P1, thus possib
2bc20 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20  ly avoiding the 
2bc30 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20  need to.** seek 
2bc40 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20  and read cursor 
2bc50 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P3..*/./* Opcode
2bc60 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
2bc70 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2bc80 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
2bc90 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
2bca0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
2bcb0 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
2bcc0 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
2bcd0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
2bce0 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
2bcf0 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
2bd00 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
2bd10 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
2bd20 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
2bd30 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2bd40 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
2bd50 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
2bd60 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
2bd70 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2bd80 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
2bd90 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  d..*/.case OP_Se
2bda0 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  ek:.case OP_IdxR
2bdb0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
2bdc0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
2bdd0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2bde0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2bdf0 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65 78   /* The P1 index
2be00 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62   cursor */.  Vdb
2be10 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75 72  eCursor *pTabCur
2be20 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
2be30 68 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73  he P2 table curs
2be40 6f 72 20 28 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79  or (OP_Seek only
2be50 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  ) */.  i64 rowid
2be60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2be70 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74        /* Rowid t
2be80 68 61 74 20 50 31 20 63 75 72 72 65 6e 74 20 70  hat P1 current p
2be90 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61  oints to */..  a
2bea0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2beb0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2bec0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2bed0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2bee0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2bef0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2bf00 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2bf10 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2bf20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
2bf30 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
2bf40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2bf50 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73  Table==0 );.  as
2bf60 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2bf70 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2bf80 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75   assert( !pC->nu
2bf90 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70  llRow || pOp->op
2bfa0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69  code==OP_IdxRowi
2bfb0 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49  d );..  /* The I
2bfc0 64 78 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b  dxRowid and Seek
2bfd0 20 6f 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d   opcodes are com
2bfe0 62 69 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66  bined because of
2bff0 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79   the commonality
2c000 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33  .  ** of sqlite3
2c010 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
2c020 65 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56  e() and sqlite3V
2c030 64 62 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a  dbeIdxRowid(). *
2c040 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
2c050 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
2c060 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c  e(pC);..  /* sql
2c070 69 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73  ite3VbeCursorRes
2c080 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20  tore() can only 
2c090 66 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f  fail if the reco
2c0a0 72 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65  rd has been dele
2c0b0 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f  ted.  ** out fro
2c0c0 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73  m under the curs
2c0d0 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e  or.  That will n
2c0e0 65 76 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72  ever happens for
2c0f0 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a   an IdxRowid.  *
2c100 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65  * or Seek opcode
2c110 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28   */.  if( NEVER(
2c120 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
2c130 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c140 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28  to_error;..  if(
2c150 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b   !pC->nullRow ){
2c160 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20  .    rowid = 0; 
2c170 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
2c180 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
2c190 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2c1a0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2c1b0 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
2c1c0 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72  (db, pC->uc.pCur
2c1d0 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  sor, &rowid);.  
2c1e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2c1f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
2c200 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2c210 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
2c220 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2c230 3d 4f 50 5f 53 65 65 6b 20 29 7b 0a 20 20 20 20  =OP_Seek ){.    
2c240 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c250 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
2c260 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2c270 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d      pTabCur = p-
2c280 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b  >apCsr[pOp->p3];
2c290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2c2a0 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  TabCur!=0 );.   
2c2b0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2c2c0 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
2c2d0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2c2e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2c2f0 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  bCur->uc.pCursor
2c300 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
2c310 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73  ert( pTabCur->is
2c320 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70  Table );.      p
2c330 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  TabCur->nullRow 
2c340 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43  = 0;.      pTabC
2c350 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  ur->movetoTarget
2c360 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20   = rowid;.      
2c370 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65  pTabCur->deferre
2c380 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20  dMoveto = 1;.   
2c390 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c3a0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
2c3b0 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61  RAY || pOp->p4.a
2c3c0 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54  i==0 );.      pT
2c3d0 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d  abCur->aAltMap =
2c3e0 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20   pOp->p4.ai;.   
2c3f0 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74     pTabCur->pAlt
2c400 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20  Cursor = pC;.   
2c410 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f   }else{.      pO
2c420 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2c430 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20  ase(p, pOp);.   
2c440 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
2c450 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  owid;.    }.  }e
2c460 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2c470 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2c480 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  _IdxRowid );.   
2c490 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c4a0 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70  etNull(&aMem[pOp
2c4b0 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72  ->p2]);.  }.  br
2c4c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2c4d0 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
2c4e0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2c4f0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2c500 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2c510 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2c520 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2c530 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2c540 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2c550 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2c560 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
2c570 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2c580 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
2c590 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
2c5a0 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
2c5b0 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
2c5c0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
2c5d0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
2c5e0 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
2c5f0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
2c600 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2c610 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2c620 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2c630 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2c640 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2c650 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2c660 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2c670 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2c680 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2c690 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
2c6a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2c6b0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2c6c0 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2c6d0 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2c6e0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2c6f0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2c700 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2c710 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2c720 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2c730 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2c740 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2c750 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2c760 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2c770 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2c780 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2c790 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2c7a0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2c7b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2c7c0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2c7d0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
2c7e0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2c7f0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2c800 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2c810 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2c820 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2c830 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2c840 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
2c850 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2c860 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2c870 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2c880 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2c890 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2c8a0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2c8b0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2c8c0 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2c8d0 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2c8e0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2c8f0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2c900 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2c910 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2c920 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2c930 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2c940 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2c950 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2c960 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2c970 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2c980 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
2c990 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2c9a0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
2c9b0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2c9c0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2c9d0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2c9e0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2c9f0 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
2ca00 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2ca10 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2ca20 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2ca30 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2ca40 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2ca50 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2ca60 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2ca70 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2ca80 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2ca90 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2caa0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2cab0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2cac0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2cad0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2cae0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2caf0 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2cb00 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2cb10 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2cb20 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2cb30 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
2cb40 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2cb50 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2cb60 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
2cb70 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2cb80 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2cb90 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2cba0 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
2cbb0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2cbc0 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
2cbd0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2cbe0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
2cbf0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2cc00 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2cc10 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
2cc20 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2cc30 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
2cc40 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2cc50 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2cc60 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2cc70 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2cc80 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2cc90 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2cca0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2ccb0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2ccc0 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
2ccd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2cce0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2ccf0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2cd00 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2cd10 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
2cd20 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2cd30 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2cd40 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
2cd50 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
2cd60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2cd70 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
2cd80 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
2cd90 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2cda0 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2cdb0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2cdc0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2cdd0 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
2cde0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2cdf0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2ce00 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2ce10 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
2ce20 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
2ce30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2ce40 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2ce50 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
2ce60 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ce70 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
2ce80 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2ce90 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
2cea0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
2ceb0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2cec0 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
2ced0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
2cee0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
2cef0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
2cf00 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
2cf10 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
2cf20 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2cf30 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2cf40 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2cf50 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2cf60 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
2cf70 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
2cf80 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
2cf90 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
2cfa0 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
2cfb0 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
2cfc0 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
2cfd0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
2cfe0 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
2cff0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2d000 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2d010 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2d020 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
2d030 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
2d040 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2d050 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2d060 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2d070 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2d080 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
2d090 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
2d0a0 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
2d0b0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2d0c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d0d0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30  ror;.  if( res>0
2d0e0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2d0f0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2d100 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
2d110 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
2d120 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
2d130 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2d140 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2d150 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
2d160 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
2d170 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
2d180 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
2d190 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
2d1a0 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
2d1b0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2d1c0 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
2d1d0 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
2d1e0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2d1f0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2d200 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2d210 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2d220 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2d230 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2d240 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2d250 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2d260 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
2d270 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
2d280 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2d290 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
2d2a0 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
2d2b0 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
2d2c0 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
2d2d0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
2d2e0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
2d2f0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
2d300 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
2d310 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
2d320 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
2d330 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
2d340 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
2d350 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
2d360 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
2d370 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
2d380 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
2d390 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
2d3a0 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
2d3b0 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
2d3c0 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
2d3d0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
2d3e0 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
2d3f0 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
2d400 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2d410 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
2d420 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2d430 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
2d440 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
2d450 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
2d460 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
2d470 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2d480 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
2d490 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
2d4a0 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
2d4b0 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
2d4c0 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b  oved;.  int iDb;
2d4d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
2d4e0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2d4f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2d500 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  1 );.  pOut = ou
2d510 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2d520 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
2d530 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2d540 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52    if( db->nVdbeR
2d550 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74  ead > db->nVDest
2d560 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20  roy+1 ){.    rc 
2d570 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
2d580 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
2d590 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
2d5a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2d5b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2d5c0 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
2d5d0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
2d5e0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2d5f0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
2d600 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64  b) );.    iMoved
2d610 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2d620 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73  eded.  Only to s
2d630 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
2d640 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
2d650 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
2d660 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
2d670 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
2d680 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
2d690 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
2d6a0 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
2d6b0 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20  i = iMoved;.    
2d6c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2d6d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2d6e0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2d6f0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
2d700 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21  .    if( iMoved!
2d710 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2d720 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2d730 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
2d740 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
2d750 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
2d760 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
2d770 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
2d780 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
2d790 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
2d7a0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
2d7b0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2d7c0 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
2d7d0 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
2d7e0 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
2d7f0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
2d800 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d810 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
2d820 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
2d830 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
2d840 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2d850 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2d860 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
2d870 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
2d880 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
2d890 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
2d8a0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
2d8b0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
2d8c0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2d8d0 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
2d8e0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2d8f0 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
2d900 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2d910 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2d920 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
2d930 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
2d940 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2d950 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2d960 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2d970 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2d980 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2d990 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2d9a0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2d9b0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2d9c0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
2d9d0 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
2d9e0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
2d9f0 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
2da00 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
2da10 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
2da20 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
2da30 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
2da40 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
2da50 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
2da60 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2da70 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2da80 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2da90 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
2daa0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
2dab0 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
2dac0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
2dad0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
2dae0 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
2daf0 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
2db00 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2db10 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2db20 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
2db30 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
2db40 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
2db50 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
2db60 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
2db70 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
2db80 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2db90 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2dba0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2dbb0 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
2dbc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2dbd0 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
2dbe0 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
2dbf0 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
2dc00 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
2dc10 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
2dc20 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2dc30 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
2dc40 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2dc50 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
2dc60 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2dc70 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
2dc80 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
2dc90 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2dca0 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
2dcb0 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
2dcc0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
2dcd0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2dce0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
2dcf0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2dd00 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2dd10 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2dd20 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31  : ResetSorter P1
2dd30 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
2dd40 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2dd50 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65  ts from the ephe
2dd60 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73  meral table or s
2dd70 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73  orter.** that is
2dd80 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20   open on cursor 
2dd90 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P1..**.** This o
2dda0 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73  pcode only works
2ddb0 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65   for cursors use
2ddc0 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e  d for sorting an
2ddd0 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68  d.** opened with
2dde0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
2ddf0 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70  l or OP_SorterOp
2de00 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  en..*/.case OP_R
2de10 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20  esetSorter: {.  
2de20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2de30 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d   .  assert( pOp-
2de40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2de50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2de60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2de70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2de80 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
2de90 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
2dea0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2deb0 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
2dec0 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72  , pC->uc.pSorter
2ded0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2dee0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2def0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2df00 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
2df10 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
2df20 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
2df30 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2df40 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
2df50 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2df60 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2df70 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2df80 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
2df90 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2dfa0 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50  CreateTable P1 P
2dfb0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2dfc0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2dfd0 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
2dfe0 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
2dff0 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
2e000 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2e010 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
2e020 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
2e030 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2e040 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
2e050 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
2e060 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
2e070 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
2e080 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
2e090 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
2e0a0 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
2e0b0 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
2e0c0 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
2e0d0 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
2e0e0 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
2e0f0 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
2e100 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
2e110 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
2e120 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
2e130 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
2e140 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
2e150 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
2e160 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
2e170 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
2e180 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
2e190 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
2e1a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2e1b0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
2e1c0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
2e1d0 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ew index in the 
2e1e0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2e1f0 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
2e200 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
2e210 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2e220 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
2e230 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2e240 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
2e250 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
2e260 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
2e270 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
2e280 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2e290 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63  2..**.** See doc
2e2a0 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50  umentation on OP
2e2b0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72  _CreateTable for
2e2c0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
2e2d0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
2e2e0 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a   OP_CreateIndex:
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2e300 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ut2 */.case OP_C
2e310 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
2e320 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2e330 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
2e340 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
2e350 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  *pDb;..  pOut = 
2e360 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2e370 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d  , pOp);.  pgno =
2e380 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2e390 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2e3a0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2e3b0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2e3c0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2e3d0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
2e3e0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2e3f0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
2e400 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
2e410 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e420 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
2e430 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2e440 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
2e450 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
2e460 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
2e470 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
2e480 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
2e490 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
2e4a0 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
2e4b0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
2e4c0 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
2e4d0 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
2e4e0 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69  gno, flags);.  i
2e4f0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2e500 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e510 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
2e520 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
2e530 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71 6c 45  ./* Opcode: SqlE
2e540 78 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  xec * * * P4 *.*
2e550 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53 51 4c  *.** Run the SQL
2e560 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 74   statement or st
2e570 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69  atements specifi
2e580 65 64 20 69 6e 20 74 68 65 20 50 34 20 73 74 72  ed in the P4 str
2e590 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ing..*/.case OP_
2e5a0 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20 64 62 2d  SqlExec: {.  db-
2e5b0 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72  >nSqlExec++;.  r
2e5c0 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2e5d0 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  (db, pOp->p4.z, 
2e5e0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e  0, 0, 0);.  db->
2e5f0 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66  nSqlExec--;.  if
2e600 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2e610 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2e620 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e630 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
2e640 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
2e650 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
2e660 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
2e670 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
2e680 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
2e690 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
2e6a0 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
2e6b0 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
2e6c0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2e6d0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
2e6e0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
2e6f0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2e700 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
2e710 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
2e720 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
2e730 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
2e740 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
2e750 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
2e760 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
2e770 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
2e780 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
2e790 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
2e7a0 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
2e7b0 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
2e7c0 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
2e7d0 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
2e7e0 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
2e7f0 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
2e800 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
2e810 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
2e820 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
2e830 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
2e840 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
2e850 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2e860 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
2e870 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
2e880 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
2e890 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
2e8a0 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
2e8b0 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
2e8c0 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
2e8d0 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
2e8e0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
2e8f0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
2e900 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2e910 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
2e920 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
2e930 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f  maLoaded) );.  /
2e940 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63  * Used to be a c
2e950 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a  onditional */ {.
2e960 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41      zMaster = MA
2e970 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69  STER_NAME;.    i
2e980 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
2e990 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
2e9a0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
2e9b0 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
2e9c0 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
2e9d0 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
2e9e0 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
2e9f0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
2ea00 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
2ea10 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
2ea20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
2ea30 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
2ea40 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44   db->aDb[iDb].zD
2ea50 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  bSName, zMaster,
2ea60 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
2ea70 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
2ea80 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
2ea90 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20  E_NOMEM_BKPT;.  
2eaa0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
2eab0 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
2eac0 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
2ead0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2eae0 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
2eaf0 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
2eb00 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
2eb10 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
2eb20 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
2eb30 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
2eb40 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
2eb50 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
2eb60 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
2eb70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2eb80 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
2eb90 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
2eba0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
2ebb0 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
2ebc0 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
2ebd0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
2ebe0 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2ebf0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
2ec00 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
2ec10 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
2ec20 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
2ec30 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2ec40 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
2ec50 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2ec60 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2ec70 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
2ec80 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2ec90 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64  NALYZE)./* Opcod
2eca0 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
2ecb0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2ecc0 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
2ecd0 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
2ece0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
2ecf0 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
2ed00 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
2ed10 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
2ed20 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
2ed30 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
2ed40 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
2ed50 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
2ed60 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
2ed70 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
2ed80 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
2ed90 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
2eda0 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  s: {.  assert( p
2edb0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2edc0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2edd0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e    rc = sqlite3An
2ede0 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70  alysisLoad(db, p
2edf0 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72  Op->p1);.  if( r
2ee00 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2ee10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2ee20 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
2ee30 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
2ee40 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
2ee50 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
2ee60 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
2ee70 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2ee80 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2ee90 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2eea0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2eeb0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2eec0 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
2eed0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2eee0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2eef0 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
2ef00 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2ef10 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2ef20 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2ef30 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
2ef40 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
2ef50 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2ef60 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2ef70 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2ef80 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2ef90 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2efa0 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
2efb0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2efc0 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
2efd0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2efe0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2eff0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
2f000 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
2f010 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2f020 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2f030 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2f040 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2f050 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
2f060 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
2f070 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2f080 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2f090 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
2f0a0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2f0b0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2f0c0 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20  troy opcode).** 
2f0d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2f0e0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2f0f0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2f100 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2f110 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2f120 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2f130 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
2f140 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
2f150 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
2f160 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
2f170 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2f180 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2f190 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
2f1a0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2f1b0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2f1c0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2f1d0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2f1e0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2f1f0 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
2f200 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2f210 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2f220 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2f230 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
2f240 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2f250 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2f260 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f  roy opcode) in o
2f270 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a  rder to keep .**
2f280 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2f290 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2f2a0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2f2b0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2f2c0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2f2d0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
2f2e0 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
2f2f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2f300 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
2f310 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2f320 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
2f330 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2f340 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2f350 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
2f360 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
2f370 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44  P3 P4 P5.**.** D
2f380 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
2f390 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
2f3a0 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
2f3b0 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
2f3c0 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
2f3d0 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
2f3e0 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
2f3f0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
2f400 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
2f410 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
2f420 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
2f430 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
2f440 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
2f450 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74  tains one less t
2f460 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  han the maximum 
2f470 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
2f480 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
2f490 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
2f4a0 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
2f4b0 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
2f4c0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
2f4d0 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
2f4e0 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
2f4f0 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
2f500 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
2f510 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
2f520 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
2f530 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
2f540 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
2f550 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
2f560 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
2f570 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
2f580 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ers.** stored in
2f590 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67   P4_INTARRAY arg
2f5a0 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ument..**.** If 
2f5b0 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P5 is not zero, 
2f5c0 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  the check is don
2f5d0 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61  e on the auxilia
2f5e0 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  ry database.** f
2f5f0 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69  ile, not the mai
2f600 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
2f610 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2f620 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  de is used to im
2f630 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65  plement the inte
2f640 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67  grity_check prag
2f650 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ma..*/.case OP_I
2f660 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20  ntegrityCk: {.  
2f670 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20  int nRoot;      
2f680 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
2f690 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28  les to check.  (
2f6a0 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70  Number of root p
2f6b0 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20  ages.) */.  int 
2f6c0 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41  *aRoot;     /* A
2f6d0 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65  rray of rootpage
2f6e0 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62   numbers for tab
2f6f0 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65  les to be checke
2f700 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  d */.  int nErr;
2f710 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2f720 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
2f730 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
2f740 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
2f750 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
2f760 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
2f770 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
2f780 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
2f790 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
2f7a0 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
2f7b0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
2f7c0 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
2f7d0 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74  pOp->p2;.  aRoot
2f7e0 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2f7f0 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
2f800 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52   );.  assert( aR
2f810 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29 3b  oot[nRoot]==0 );
2f820 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2f830 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2f840 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
2f850 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
2f860 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
2f870 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
2f880 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
2f890 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
2f8a0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2f8b0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
2f8c0 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
2f8d0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
2f8e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2f8f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
2f900 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2f910 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2f920 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2f930 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73  ->p5) );.  z = s
2f940 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
2f950 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
2f960 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
2f970 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20  aRoot, nRoot,.  
2f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2f9a0 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31  int)pnErr->u.i+1
2f9b0 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
2f9c0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2f9d0 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
2f9e0 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
2f9f0 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
2fa00 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
2fa10 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
2fa20 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
2fa30 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2fa40 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  rr-1;.    sqlite
2fa50 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2fa60 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2fa70 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2fa80 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2fa90 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2faa0 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2fab0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2fac0 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2fad0 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2fae0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2faf0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2fb00 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2fb10 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2fb20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2fb30 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28  ynopsis: rowset(
2fb40 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2fb50 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2fb60 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2fb70 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2fb80 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
2fb90 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
2fba0 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2fbb0 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2fbc0 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2fbd0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2fbe0 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2fbf0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2fc00 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2fc10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2fc20 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2fc30 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2fc40 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2fc50 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2fc60 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2fc70 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2fc80 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2fc90 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2fca0 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2fcb0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2fcc0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2fcd0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2fce0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2fcf0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2fd00 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2fd10 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2fd20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2fd30 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2fd40 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2fd50 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65  sis: r[P3]=rowse
2fd60 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2fd70 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2fd80 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2fd90 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2fda0 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2fdb0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2fdc0 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2fdd0 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2fde0 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2fdf0 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2fe00 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2fe10 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2fe20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2fe30 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2fe40 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2fe50 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2fe60 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2fe70 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2fe80 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2fe90 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2fea0 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2feb0 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2fec0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2fed0 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2fee0 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2fef0 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2ff00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ff10 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2ff20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2ff30 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f  ken(1,2);.    go
2ff40 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2ff50 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2ff60 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
2ff70 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2ff80 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2ff90 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2ffa0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ffb0 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  0,2);.    sqlite
2ffc0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2ffd0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
2ffe0 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74   val);.  }.  got
2fff0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
30000 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
30010 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
30020 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
30030 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
30040 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
30050 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
30060 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
30070 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
30080 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
30090 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
300a0 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
300b0 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
300c0 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
300d0 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
300e0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
300f0 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
30100 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
30110 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
30120 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
30130 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
30140 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
30150 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
30160 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
30170 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
30180 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
30190 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
301a0 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
301b0 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
301c0 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
301d0 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
301e0 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
301f0 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
30200 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
30210 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
30220 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
30230 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
30240 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
30250 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
30260 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
30270 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
30280 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
30290 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
302a0 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
302b0 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
302c0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
302d0 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
302e0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
302f0 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
30300 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
30310 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
30320 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
30330 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
30340 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
30350 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
30360 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
30370 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
30380 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
30390 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
303a0 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
303b0 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
303c0 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
303d0 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
303e0 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
303f0 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
30400 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
30410 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
30420 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
30430 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
30440 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
30450 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
30460 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
30470 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
30480 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
30490 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
304a0 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
304b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304c0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
304d0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
304e0 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
304f0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
30500 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
30510 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
30520 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
30530 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
30540 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
30550 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
30560 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
30570 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
30580 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
30590 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
305a0 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
305b0 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
305c0 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
305d0 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
305e0 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
305f0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
30600 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
30610 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
30620 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
30630 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
30640 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
30650 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
30660 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
30670 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
30680 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
30690 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
306a0 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
306b0 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
306c0 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
306d0 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
306e0 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
306f0 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
30700 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
30710 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
30720 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f 74  if( exists ) got
30730 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
30740 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
30750 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
30760 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
30770 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
30780 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
30790 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
307a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
307b0 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
307c0 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
307d0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
307e0 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
307f0 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
30800 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
30810 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
30820 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
30830 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
30840 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
30850 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
30860 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
30870 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
30880 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
30890 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
308a0 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
308b0 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
308c0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
308d0 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
308e0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
308f0 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
30900 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
30910 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
30920 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
30930 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
30940 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
30950 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
30960 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
30970 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
30980 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
30990 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
309a0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
309b0 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
309c0 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
309d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
309e0 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
309f0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
30a00 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
30a10 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
30a20 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
30a30 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
30a40 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
30a50 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
30a60 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
30a70 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
30a80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
30a90 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
30aa0 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
30ab0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
30ac0 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
30ad0 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
30ae0 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
30af0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
30b00 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
30b10 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
30b20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
30b30 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
30b40 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
30b50 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
30b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
30b70 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
30b80 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
30b90 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
30ba0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
30bb0 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
30bc0 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
30bd0 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
30be0 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
30bf0 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
30c00 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
30c10 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
30c20 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
30c30 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
30c40 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
30c50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
30c60 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
30c70 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
30c80 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
30c90 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
30ca0 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
30cb0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
30cc0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
30cd0 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
30ce0 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
30cf0 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
30d00 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
30d10 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
30d20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
30d30 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
30d40 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
30d50 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
30d60 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
30d70 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
30d80 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
30d90 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
30da0 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
30db0 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
30dc0 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
30dd0 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
30de0 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
30df0 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
30e00 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
30e10 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
30e20 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
30e30 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
30e40 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
30e50 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
30e60 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
30e70 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
30e80 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
30e90 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
30ea0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
30eb0 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
30ec0 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
30ed0 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
30ee0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
30ef0 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
30f00 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
30f10 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
30f20 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
30f30 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
30f40 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
30f50 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
30f60 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
30f70 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
30f80 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
30f90 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
30fa0 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
30fb0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
30fc0 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
30fd0 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
30fe0 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
30ff0 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
31000 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
31010 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
31020 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
31030 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
31040 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
31050 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
31060 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
31070 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d  eError(p, "too m
31080 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
31090 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
310a0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
310b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
310c0 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
310d0 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
310e0 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
310f0 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
31100 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
31110 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
31120 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
31130 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
31140 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
31150 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
31160 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
31170 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
31180 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
31190 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
311a0 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
311b0 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
311c0 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
311d0 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
311e0 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
311f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
31200 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
31210 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
31220 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
31230 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
31240 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
31250 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
31260 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
31270 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
31280 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
31290 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
312a0 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
312b0 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
312c0 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
312d0 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
312e0 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
312f0 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
31300 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
31310 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
31320 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
31330 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
31340 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
31350 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72  >nCsr;.    asser
31360 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20  t( nMem>0 );.   
31370 20 69 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e   if( pProgram->n
31380 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b  Csr==0 ) nMem++;
31390 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
313a0 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
313b0 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
313c0 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
313d0 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
313e0 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
313f0 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
31400 66 28 56 64 62 65 43 75 72 73 6f 72 2a 29 0a 20  f(VdbeCursor*). 
31410 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 28               + (
31420 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20  pProgram->nOp + 
31430 37 29 2f 38 3b 0a 20 20 20 20 70 46 72 61 6d 65  7)/8;.    pFrame
31440 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
31450 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65  ocZero(db, nByte
31460 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72 61  );.    if( !pFra
31470 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  me ){.      goto
31480 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
31490 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
314a0 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20  mRelease(pRt);. 
314b0 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20     pRt->flags = 
314c0 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70  MEM_Frame;.    p
314d0 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70  Rt->u.pFrame = p
314e0 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61  Frame;..    pFra
314f0 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70  me->v = p;.    p
31500 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
31510 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72   = nMem;.    pFr
31520 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d  ame->nChildCsr =
31530 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
31540 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20  .    pFrame->pc 
31550 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
31560 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  p);.    pFrame->
31570 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
31580 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d      pFrame->nMem
31590 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20   = p->nMem;.    
315a0 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20  pFrame->apCsr = 
315b0 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46  p->apCsr;.    pF
315c0 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  rame->nCursor = 
315d0 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20  p->nCursor;.    
315e0 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d  pFrame->aOp = p-
315f0 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65  >aOp;.    pFrame
31600 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a  ->nOp = p->nOp;.
31610 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65      pFrame->toke
31620 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f  n = pProgram->to
31630 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ken;.#ifdef SQLI
31640 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
31650 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46  CANSTATUS.    pF
31660 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70  rame->anExec = p
31670 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66  ->anExec;.#endif
31680 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64  ..    pEnd = &Vd
31690 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
316a0 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  e)[pFrame->nChil
316b0 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70  dMem];.    for(p
316c0 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d  Mem=VdbeFrameMem
316d0 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d  (pFrame); pMem!=
316e0 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20  pEnd; pMem++){. 
316f0 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73       pMem->flags
31700 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
31710 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62  ;.      pMem->db
31720 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d   = db;.    }.  }
31730 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65  else{.    pFrame
31740 20 3d 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65   = pRt->u.pFrame
31750 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
31760 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
31770 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
31780 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a  ame->nChildMem .
31790 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f          || (pPro
317a0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26  gram->nCsr==0 &&
317b0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
317c0 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  1==pFrame->nChil
317d0 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73  dMem) );.    ass
317e0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
317f0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
31800 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
31810 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20  sert( (int)(pOp 
31820 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e  - aOp)==pFrame->
31830 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
31840 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
31850 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
31860 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
31870 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  e->lastRowid = d
31880 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
31890 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
318a0 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
318b0 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
318c0 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
318d0 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46  ge;.  assert( pF
318e0 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d  rame->pAuxData==
318f0 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  0 );.  pFrame->p
31900 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75  AuxData = p->pAu
31910 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78  xData;.  p->pAux
31920 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e  Data = 0;.  p->n
31930 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
31940 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
31950 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
31960 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65  em = VdbeFrameMe
31970 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e  m(pFrame);.  p->
31980 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
31990 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
319a0 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
319b0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
319c0 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
319d0 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
319e0 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70  em[p->nMem];.  p
319f0 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28  Frame->aOnce = (
31a00 75 38 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 50  u8*)&p->apCsr[pP
31a10 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20  rogram->nCsr];. 
31a20 20 6d 65 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e   memset(pFrame->
31a30 61 4f 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f 67  aOnce, 0, (pProg
31a40 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29  ram->nOp + 7)/8)
31a50 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70  ;.  p->aOp = aOp
31a60 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70   = pProgram->aOp
31a70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72  ;.  p->nOp = pPr
31a80 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64  ogram->nOp;.#ifd
31a90 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
31aa0 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
31ab0 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30  .  p->anExec = 0
31ac0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d  ;.#endif.  pOp =
31ad0 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72   &aOp[-1];..  br
31ae0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
31af0 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a  e: Param P1 P2 *
31b00 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
31b10 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65  opcode is only e
31b20 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73  ver present in s
31b30 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c  ub-programs call
31b40 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f  ed via the .** O
31b50 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
31b60 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61  ction. Copy a va
31b70 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74  lue currently st
31b80 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79  ored in a memory
31b90 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65   .** cell of the
31ba0 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74   calling (parent
31bb0 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20  ) frame to cell 
31bc0 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  P2 in the curren
31bd0 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64  t frames .** add
31be0 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73  ress space. This
31bf0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
31c00 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20  ger programs to 
31c10 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a  access the new.*
31c20 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76   .** and old.* v
31c30 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  alues..**.** The
31c40 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
31c50 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65  cell in the pare
31c60 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65  nt frame is dete
31c70 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67  rmined by adding
31c80 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
31c90 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
31ca0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
31cb0 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
31cc0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69   to the.** calli
31cd0 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ng OP_Program in
31ce0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
31cf0 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20  se OP_Param: {  
31d00 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
31d10 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
31d20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
31d30 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  pIn;.  pOut = ou
31d40 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
31d50 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d  pOp);.  pFrame =
31d60 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49   p->pFrame;.  pI
31d70 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  n = &pFrame->aMe
31d80 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61  m[pOp->p1 + pFra
31d90 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e  me->aOp[pFrame->
31da0 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71  pc].p1];   .  sq
31db0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
31dc0 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
31dd0 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  n, MEM_Ephem);. 
31de0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69   break;.}..#endi
31df0 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
31e00 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
31e10 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
31e20 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
31e30 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _KEY./* Opcode: 
31e40 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20  FkCounter P1 P2 
31e50 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
31e60 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32  s: fkctr[P1]+=P2
31e70 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74  .**.** Increment
31e80 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63   a "constraint c
31e90 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50  ounter" by P2 (P
31ea0 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76  2 may be negativ
31eb0 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a  e or positive)..
31ec0 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
31ed0 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61  zero, the databa
31ee0 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se constraint co
31ef0 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
31f00 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72  nted .** (deferr
31f10 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ed foreign key c
31f20 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68  onstraints). Oth
31f30 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73  erwise, if P1 is
31f40 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73   zero, the .** s
31f50 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72  tatement counter
31f60 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
31f70 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
31f80 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
31f90 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ts)..*/.case OP_
31fa0 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69  FkCounter: {.  i
31fb0 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
31fc0 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
31fd0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
31fe0 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f  redImmCons += pO
31ff0 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69  p->p2;.  }else i
32000 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
32010 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
32020 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
32030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
32040 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d  nFkConstraint +=
32050 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20   pOp->p2;.  }.  
32060 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
32070 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31  ode: FkIfZero P1
32080 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
32090 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b  opsis: if fkctr[
320a0 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  P1]==0 goto P2.*
320b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
320c0 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65   tests if a fore
320d0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
320e0 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75  nt-counter is cu
320f0 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a  rrently zero..**
32100 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
32110 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
32120 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
32130 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
32140 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ext .** instruct
32150 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ion..**.** If P1
32160 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
32170 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  en the jump is t
32180 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  aken if the data
32190 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d  base constraint-
321a0 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65  counter.** is ze
321b0 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74  ro (the one that
321c0 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64   counts deferred
321d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
321e0 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69  ations). If P1 i
321f0 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a  s.** zero, the j
32200 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
32210 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
32220 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
32230 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d   is zero.** (imm
32240 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
32250 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ey constraint vi
32260 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61  olations)..*/.ca
32270 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20  se OP_FkIfZero: 
32280 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
32290 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p */.  if( pOp->
322a0 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  p1 ){.    VdbeBr
322b0 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44  anchTaken(db->nD
322c0 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
322d0 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
322e0 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
322f0 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65     if( db->nDefe
32300 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
32310 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
32320 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ons==0 ) goto ju
32330 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
32340 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
32350 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e  hTaken(p->nFkCon
32360 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
32370 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
32380 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
32390 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
323a0 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
323b0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
323c0 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
323d0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
323e0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  ;.}.#endif /* #i
323f0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
32400 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f  T_FOREIGN_KEY */
32410 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32420 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
32430 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  ENT./* Opcode: M
32440 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20  emMax P1 P2 * * 
32450 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
32460 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72  [P1]=max(r[P1],r
32470 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69  [P2]).**.** P1 i
32480 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
32490 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
324a0 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
324b0 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
324c0 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
324d0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
324e0 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
324f0 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
32500 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
32510 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
32520 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
32530 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
32540 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
32550 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
32560 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
32570 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
32580 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
32590 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
325a0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
325b0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
325c0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
325d0 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
325e0 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
325f0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
32600 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
32610 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70  *pFrame;.  if( p
32620 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
32630 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
32640 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
32650 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
32660 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
32670 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61      pIn1 = &pFra
32680 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
32690 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
326a0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
326b0 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73  ->p1];.  }.  ass
326c0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
326d0 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
326e0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
326f0 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
32700 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
32710 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
32720 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
32730 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
32740 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
32750 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
32760 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
32770 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
32780 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
32790 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
327a0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
327b0 66 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20  fPos P1 P2 P3 * 
327c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
327d0 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72  f r[P1]>0 then r
327e0 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50  [P1]-=P3, goto P
327f0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
32800 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
32810 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20   an integer..** 
32820 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
32830 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31  register P1 is 1
32840 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75 62   or greater, sub
32850 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68  tract P3 from th
32860 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31  e.** value in P1
32870 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e   and jump to P2.
32880 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e  .**.** If the in
32890 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72  itial value of r
328a0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
328b0 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20  ss than 1, then 
328c0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
328d0 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f  unchanged and co
328e0 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72  ntrol passes thr
328f0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
32900 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
32910 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20  .case OP_IfPos: 
32920 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
32930 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
32940 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
32950 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
32960 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
32970 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
32980 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e  aken( pIn1->u.i>
32990 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
329a0 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
329b0 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70  pIn1->u.i -= pOp
329c0 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  ->p3;.    goto j
329d0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
329e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
329f0 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69  code: OffsetLimi
32a00 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
32a10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
32a20 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32  [P1]>0 then r[P2
32a30 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b  ]=r[P1]+max(0,r[
32a40 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d  P3]) else r[P2]=
32a50 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  (-1).**.** This 
32a60 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
32a70 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20  a commonly used 
32a80 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73 73 6f  computation asso
32a90 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c  ciated with.** L
32aa0 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
32ab0 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d 20  process.  r[P1] 
32ac0 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69 74 20  holds the limit 
32ad0 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a  counter.  r[P3].
32ae0 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f 66 66  ** holds the off
32af0 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20 54 68  set counter.  Th
32b00 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74 65  e opcode compute
32b10 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 76  s the combined v
32b20 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c  alue.** of the L
32b30 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
32b40 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
32b50 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20  value in r[P2]. 
32b60 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61   The r[P2].** va
32b70 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69 73 20  lue computed is 
32b80 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
32b90 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 77 69   of rows that wi
32ba0 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a  ll need to be.**
32bb0 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72 64 65   visited in orde
32bc0 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68  r to complete th
32bd0 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  e query..**.** I
32be0 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20  f r[P3] is zero 
32bf0 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61  or negative, tha
32c00 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73  t means there is
32c10 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e   no OFFSET.** an
32c20 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74  d r[P2] is set t
32c30 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f  o be the value o
32c40 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50  f the LIMIT, r[P
32c50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50  1]..**.** if r[P
32c60 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65  1] is zero or ne
32c70 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61  gative, that mea
32c80 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  ns there is no L
32c90 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32  IMIT.** and r[P2
32ca0 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20  ] is set to -1. 
32cb0 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  .**.** Otherwise
32cc0 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74  , r[P2] is set t
32cd0 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72 5b 50  o the sum of r[P
32ce0 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f  1] and r[P3]..*/
32cf0 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c  .case OP_OffsetL
32d00 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  imit: {    /* in
32d10 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a  1, out2, in3 */.
32d20 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e 31 20    i64 x;.  pIn1 
32d30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
32d40 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
32d50 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75  [pOp->p3];.  pOu
32d60 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
32d70 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
32d80 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
32d90 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
32da0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
32db0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
32dc0 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e  ;.  x = pIn1->u.
32dd0 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c  i;.  if( x<=0 ||
32de0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
32df0 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30  (&x, pIn3->u.i>0
32e00 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b  ?pIn3->u.i:0) ){
32e10 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 4c  .    /* If the L
32e20 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74 68 61  IMIT is less tha
32e30 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65  n or equal to ze
32e40 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72  ro, loop forever
32e50 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a 20 69  .  This.    ** i
32e60 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42  s documented.  B
32e70 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68 65 20  ut also, if the 
32e80 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65 78 63  LIMIT+OFFSET exc
32e90 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e 0a 20  eeds 2^63 then. 
32ea0 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20     ** also loop 
32eb0 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 20 69  forever.  This i
32ec0 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20  s undocumented. 
32ed0 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f   In fact, one co
32ee0 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20 2a 2a  uld argue.    **
32ef0 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70 20 73   that the loop s
32f00 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e  hould terminate.
32f10 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67 20 31    But assuming 1
32f20 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69   billion iterati
32f30 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72 20 73  ons.    ** per s
32f40 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63 65 65  econd (far excee
32f50 64 69 6e 67 20 74 68 65 20 63 61 70 61 62 69 6c  ding the capabil
32f60 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63 75 72  ities of any cur
32f70 72 65 6e 74 20 68 61 72 64 77 61 72 65 29 0a 20  rent hardware). 
32f80 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74     ** it would t
32f90 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30 20 79  ake nearly 300 y
32fa0 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c 6c 79  ears to actually
32fb0 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d 69 74   reach the limit
32fc0 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f  .  So.    ** loo
32fd0 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69 73 20  ping forever is 
32fe0 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61 70 70  a reasonable app
32ff0 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20  roximation. */. 
33000 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d     pOut->u.i = -
33010 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
33020 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20  pOut->u.i = x;. 
33030 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
33040 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a  * Opcode: IfNotZ
33050 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
33060 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
33070 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b  r[P1]!=0 then r[
33080 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a  P1]--, goto P2.*
33090 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
330a0 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
330b0 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
330c0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
330d0 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69  ister P1 is.** i
330e0 6e 69 74 69 61 6c 6c 79 20 67 72 65 61 74 65 72  nitially greater
330f0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
33100 20 64 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76   decrement the v
33110 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
33120 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73   P1..** If it is
33130 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74   non-zero (negat
33140 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
33150 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a   and then also j
33160 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20  ump to P2.  .** 
33170 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  If register P1 i
33180 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f  s initially zero
33190 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61  , leave it uncha
331a0 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  nged and fall th
331b0 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rough..*/.case O
331c0 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20  P_IfNotZero: {  
331d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
331e0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
331f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
33200 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
33210 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
33220 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
33230 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32  n(pIn1->u.i<0, 2
33240 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
33250 2e 69 20 29 7b 0a 20 20 20 20 20 69 66 28 20 70  .i ){.     if( p
33260 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e  In1->u.i>0 ) pIn
33270 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67  1->u.i--;.     g
33280 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
33290 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
332a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a  /* Opcode: DecrJ
332b0 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  umpZero P1 P2 * 
332c0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
332d0 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30   if (--r[P1])==0
332e0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
332f0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
33300 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e  hold an integer.
33310 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20    Decrement the 
33320 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61  value in P1.** a
33330 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66  nd jump to P2 if
33340 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
33350 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a  s exactly zero..
33360 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a  */.case OP_DecrJ
33370 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  umpZero: {      
33380 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
33390 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
333a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
333b0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
333c0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
333d0 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45  pIn1->u.i>SMALLE
333e0 53 54 5f 49 4e 54 36 34 20 29 20 70 49 6e 31 2d  ST_INT64 ) pIn1-
333f0 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72  >u.i--;.  VdbeBr
33400 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
33410 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66  u.i==0, 2);.  if
33420 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29  ( pIn1->u.i==0 )
33430 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
33440 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
33450 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
33460 70 30 20 2a 20 50 32 20 50 33 20 50 34 20 50 35  p0 * P2 P3 P4 P5
33470 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
33480 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
33490 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
334a0 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20  xecute the step 
334b0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
334c0 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a  aggregate.  The.
334d0 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20  ** function has 
334e0 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20  P5 arguments.   
334f0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
33500 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a  to the FuncDef.*
33510 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  * structure that
33520 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66   specifies the f
33530 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
33540 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20  er P3 is the.** 
33550 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a  accumulator..**.
33560 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65  ** The P5 argume
33570 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72  nts are taken fr
33580 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
33590 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73  nd its.** succes
335a0 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sors..*/./* Opco
335b0 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
335c0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
335d0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
335e0 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
335f0 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
33600 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33610 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
33620 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
33630 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
33640 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
33650 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
33660 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a  qlite3_context.*
33670 2a 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73  * object that is
33680 20 75 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65   used to run the
33690 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
336a0 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73  ster P3 is.** as
336b0 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
336c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
336d0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
336e0 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
336f0 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
33700 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a  uccessors..**.**
33710 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
33720 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20  initially coded 
33730 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20  as OP_AggStep0. 
33740 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61   On first evalua
33750 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e  tion,.** the Fun
33760 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50  cDef stored in P
33770 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  4 is converted i
33780 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63  nto an sqlite3_c
33790 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68  ontext and.** th
337a0 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e  e opcode is chan
337b0 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ged.  In this wa
337c0 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
337d0 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ation of the.** 
337e0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
337f0 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63  only happens onc
33800 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e  e, instead of on
33810 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68   each call to th
33820 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69  e.** step functi
33830 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  on..*/.case OP_A
33840 67 67 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74  ggStep0: {.  int
33850 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   n;.  sqlite3_co
33860 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20  ntext *pCtx;..  
33870 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
33880 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
33890 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  );.  n = pOp->p5
338a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
338b0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
338c0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
338d0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
338e0 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20  assert( n==0 || 
338f0 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f  (pOp->p2>0 && pO
33900 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  p->p2+n<=(p->nMe
33910 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
33920 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  )+1) );.  assert
33930 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
33940 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
33950 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74  p->p2+n );.  pCt
33960 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  x = sqlite3DbMal
33970 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a  locRawNN(db, siz
33980 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d  eof(*pCtx) + (n-
33990 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65  1)*sizeof(sqlite
339a0 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66  3_value*));.  if
339b0 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f  ( pCtx==0 ) goto
339c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d   no_mem;.  pCtx-
339d0 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74  >pMem = 0;.  pCt
339e0 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  x->pFunc = pOp->
339f0 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78  p4.pFunc;.  pCtx
33a00 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f  ->iOp = (int)(pO
33a10 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78  p - aOp);.  pCtx
33a20 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70  ->pVdbe = p;.  p
33a30 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20  Ctx->argc = n;. 
33a40 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
33a50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70  4_FUNCCTX;.  pOp
33a60 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78  ->p4.pCtx = pCtx
33a70 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
33a80 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20  = OP_AggStep;.  
33a90 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
33aa0 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20  into OP_AggStep 
33ab0 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67  */.}.case OP_Agg
33ac0 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  Step: {.  int i;
33ad0 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
33ae0 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20  xt *pCtx;.  Mem 
33af0 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a  *pMem;.  Mem t;.
33b00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33b10 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43  p4type==P4_FUNCC
33b20 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70  TX );.  pCtx = p
33b30 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70  Op->p4.pCtx;.  p
33b40 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
33b50 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  >p3];..  /* If t
33b60 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
33b70 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
33b80 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
33b90 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
33ba0 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
33bb0 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
33bc0 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
33bd0 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
33be0 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
33bf0 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
33c00 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
33c10 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
33c20 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
33c30 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
33c40 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
33c50 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
33c60 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
33c70 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  ect */.  if( pCt
33c80 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20  x->pMem != pMem 
33c90 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65  ){.    pCtx->pMe
33ca0 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f  m = pMem;.    fo
33cb0 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31  r(i=pCtx->argc-1
33cc0 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74  ; i>=0; i--) pCt
33cd0 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d  x->argv[i] = &aM
33ce0 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20  em[pOp->p2+i];. 
33cf0 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
33d00 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d  E_DEBUG.  for(i=
33d10 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b  0; i<pCtx->argc;
33d20 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
33d30 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43  t( memIsValid(pC
33d40 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a  tx->argv[i]) );.
33d50 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
33d60 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43  CE(pOp->p2+i, pC
33d70 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20  tx->argv[i]);.  
33d80 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d  }.#endif..  pMem
33d90 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  ->n++;.  sqlite3
33da0 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20  VdbeMemInit(&t, 
33db0 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  db, MEM_Null);. 
33dc0 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74   pCtx->pOut = &t
33dd0 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  ;.  pCtx->fError
33de0 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74  OrAux = 0;.  pCt
33df0 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  x->skipFlag = 0;
33e00 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d  .  (pCtx->pFunc-
33e10 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43  >xSFunc)(pCtx,pC
33e20 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61  tx->argc,pCtx->a
33e30 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  rgv); /* IMP: R-
33e40 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
33e50 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f   if( pCtx->fErro
33e60 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66  rOrAux ){.    if
33e70 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20  ( pCtx->isError 
33e80 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
33e90 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
33ea0 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
33eb0 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20  _text(&t));.    
33ec0 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45    rc = pCtx->isE
33ed0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
33ee0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
33ef0 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 20 20 69  lease(&t);.    i
33f00 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
33f10 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
33f20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
33f30 73 65 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d  sert( t.flags==M
33f40 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20  EM_Null );.  }. 
33f50 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46   if( pCtx->skipF
33f60 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72  lag ){.    asser
33f70 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
33f80 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b  e==OP_CollSeq );
33f90 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d  .    i = pOp[-1]
33fa0 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29  .p1;.    if( i )
33fb0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
33fc0 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d  etInt64(&aMem[i]
33fd0 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 1);.  }.  brea
33fe0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
33ff0 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20   AggFinal P1 P2 
34000 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
34010 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20  is: accum=r[P1] 
34020 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  N=P2.**.** Execu
34030 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
34040 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
34050 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20   aggregate.  P1 
34060 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79  is.** the memory
34070 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
34080 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
34090 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67  r for the aggreg
340a0 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73  ate..**.** P2 is
340b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61   the number of a
340c0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68  rguments that th
340d0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
340e0 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20  takes and.** P4 
340f0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
34100 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20  the FuncDef for 
34110 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20  this function.  
34120 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65  The P2.** argume
34130 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
34140 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
34150 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65  It is only there
34160 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65   to disambiguate
34170 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68  .** functions th
34180 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79  at can take vary
34190 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  ing numbers of a
341a0 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a  rguments.  The.*
341b0 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  * P4 argument is
341c0 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72   only needed for
341d0 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20   the degenerate 
341e0 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
341f0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
34200 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
34210 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
34220 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20  se OP_AggFinal: 
34230 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
34240 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
34250 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
34260 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
34270 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65  Cursor) );.  pMe
34280 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
34290 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
342a0 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d  Mem->flags & ~(M
342b0 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29  EM_Null|MEM_Agg)
342c0 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )==0 );.  rc = s
342d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
342e0 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
342f0 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66  >p4.pFunc);.  if
34300 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
34310 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
34320 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61  "%s", sqlite3_va
34330 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b  lue_text(pMem));
34340 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
34350 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
34360 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
34370 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d  hangeEncoding(pM
34380 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  em, encoding);. 
34390 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
343a0 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66  SIZE(pMem);.  if
343b0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
343c0 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a  TooBig(pMem) ){.
343d0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
343e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
343f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
34400 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63  _OMIT_WAL./* Opc
34410 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20  ode: Checkpoint 
34420 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
34430 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61  ** Checkpoint da
34440 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20  tabase P1. This 
34450 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31  is a no-op if P1
34460 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
34470 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65  y in.** WAL mode
34480 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69  . Parameter P2 i
34490 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  s one of SQLITE_
344a0 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
344b0 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53  VE, FULL,.** RES
344c0 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54  TART, or TRUNCAT
344d0 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20 30  E.  Write 1 or 0
344e0 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66   into mem[P3] if
344f0 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20   the checkpoint 
34500 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54  returns.** SQLIT
34510 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72  E_BUSY or not, r
34520 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72  espectively.  Wr
34530 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ite the number o
34540 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a  f pages in the.*
34550 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65 20  * WAL after the 
34560 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20  checkpoint into 
34570 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68  mem[P3+1] and th
34580 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
34590 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20  s.** in the WAL 
345a0 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 63  that have been c
345b0 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65  heckpointed afte
345c0 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  r the checkpoint
345d0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e  .** completes in
345e0 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48  to mem[P3+2].  H
345f0 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72  owever on an err
34600 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  or, mem[P3+1] an
34610 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61  d.** mem[P3+2] a
34620 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  re initialized t
34630 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o -1..*/.case OP
34640 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20  _Checkpoint: {. 
34650 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34670 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
34680 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33   */.  int aRes[3
34690 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
346a0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73        /* Results
346b0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346d0 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72        /* Write r
346e0 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a  esults here */..
346f0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
34700 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52  dOnly==0 );.  aR
34710 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65  es[0] = 0;.  aRe
34720 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d  s[1] = aRes[2] =
34730 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70   -1;.  assert( p
34740 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
34750 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
34760 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  E.       || pOp-
34770 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
34780 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20  KPOINT_FULL.    
34790 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
347a0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
347b0 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20 20 20  _RESTART.       
347c0 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
347d0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52  TE_CHECKPOINT_TR
347e0 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63  UNCATE.  );.  rc
347f0 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70   = sqlite3Checkp
34800 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31  oint(db, pOp->p1
34810 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73  , pOp->p2, &aRes
34820 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a  [1], &aRes[2]);.
34830 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
34840 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42  if( rc!=SQLITE_B
34850 55 53 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  USY ) goto abort
34860 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34870 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
34880 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d  K;.    aRes[0] =
34890 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d   1;.  }.  for(i=
348a0 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  0, pMem = &aMem[
348b0 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69  pOp->p3]; i<3; i
348c0 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  ++, pMem++){.   
348d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
348e0 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69  etInt64(pMem, (i
348f0 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d  64)aRes[i]);.  }
34900 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b      .  break;.};
34910 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64    .#endif..#ifnd
34920 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
34930 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a  RAGMA./* Opcode:
34940 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20   JournalMode P1 
34950 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
34960 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e  Change the journ
34970 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62  al mode of datab
34980 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33  ase P1 to P3. P3
34990 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
349a0 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55  the.** PAGER_JOU
349b0 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c  RNALMODE_XXX val
349c0 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67  ues. If changing
349d0 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72   between the var
349e0 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  ious rollback.**
349f0 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20   modes (delete, 
34a00 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73  truncate, persis
34a10 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72  t, off and memor
34a20 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69  y), this is a si
34a30 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  mple.** operatio
34a40 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75  n. No IO is requ
34a50 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  ired..**.** If c
34a60 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20  hanging into or 
34a70 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20  out of WAL mode 
34a80 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73  the procedure is
34a90 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65   more complicate
34aa0 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  d..**.** Write a
34ab0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
34ac0 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75  ng the final jou
34ad0 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67  rnal-mode to reg
34ae0 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
34af0 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  e OP_JournalMode
34b00 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a  : {    /* out2 *
34b10 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
34b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b30 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
34b40 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
34b50 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
34b60 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
34b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
34b80 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
34b90 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
34ba0 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
34bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
34bc0 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
34bd0 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
34be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bf0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
34c00 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
34c10 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
34c20 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
34c30 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
34c40 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
34c50 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
34c60 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
34c70 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75  */.#endif..  pOu
34c80 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
34c90 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e  se(p, pOp);.  eN
34ca0 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ew = pOp->p3;.  
34cb0 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41  assert( eNew==PA
34cc0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34cd0 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c  DELETE .       |
34ce0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
34cf0 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41  URNALMODE_TRUNCA
34d00 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
34d10 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
34d20 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20  LMODE_PERSIST . 
34d30 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
34d40 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34d50 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65  _OFF.       || e
34d60 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
34d70 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20  ALMODE_MEMORY.  
34d80 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
34d90 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34da0 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  WAL.       || eN
34db0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
34dc0 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b  LMODE_QUERY.  );
34dd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
34de0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
34df0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
34e00 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
34e10 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d  y==0 );..  pBt =
34e20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
34e30 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20  ].pBt;.  pPager 
34e40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
34e50 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64  ger(pBt);.  eOld
34e60 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47   = sqlite3PagerG
34e70 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
34e80 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65  ager);.  if( eNe
34e90 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
34ea0 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65  MODE_QUERY ) eNe
34eb0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20  w = eOld;.  if( 
34ec0 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54  !sqlite3PagerOkT
34ed0 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f  oChangeJournalMo
34ee0 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65  de(pPager) ) eNe
34ef0 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64  w = eOld;..#ifnd
34f00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
34f10 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d  AL.  zFilename =
34f20 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
34f30 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29  ename(pPager, 1)
34f40 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61  ;..  /* Do not a
34f50 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f  llow a transitio
34f60 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  n to journal_mod
34f70 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61  e=WAL for a data
34f80 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d  base.  ** in tem
34f90 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f  porary storage o
34fa0 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65  r if the VFS doe
34fb0 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68  s not support sh
34fc0 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a  ared memory .  *
34fd0 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41  /.  if( eNew==PA
34fe0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34ff0 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74  WAL.   && (sqlit
35000 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
35010 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20  name)==0        
35020 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20     /* Temp file 
35030 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71  */.       || !sq
35040 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70  lite3PagerWalSup
35050 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20  ported(pPager)) 
35060 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d    /* No shared-m
35070 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f  emory support */
35080 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d  .  ){.    eNew =
35090 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66   eOld;.  }..  if
350a0 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20  ( (eNew!=eOld). 
350b0 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45    && (eOld==PAGE
350c0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
350d0 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52  L || eNew==PAGER
350e0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
350f0 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ).  ){.    if( !
35100 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c  db->autoCommit |
35110 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
35120 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  1 ){.      rc = 
35130 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
35140 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
35150 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20  rror(p,.        
35160 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65    "cannot change
35170 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f   %s wal mode fro
35180 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
35190 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20  action",.       
351a0 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f     (eNew==PAGER_
351b0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
351c0 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20  ? "into" : "out 
351d0 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20  of").      );.  
351e0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
351f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
35200 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20   }else{. .      
35210 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
35220 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
35230 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
35240 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64   leaving WAL mod
35250 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67  e, close the log
35260 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73   file. If succes
35270 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20  sful, the call. 
35280 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67         ** to Pag
35290 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65  erCloseWal() che
352a0 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c  ckpoints and del
352b0 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61  etes the write-a
352c0 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20  head-log .      
352d0 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58    ** file. An EX
352e0 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79  CLUSIVE lock may
352f0 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f   still be held o
35300 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
35310 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20  ile .        ** 
35320 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66  after a successf
35330 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20  ul return. .    
35340 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72      */.        r
35350 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
35360 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 2c  CloseWal(pPager,
35370 20 64 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66   db);.        if
35380 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
35390 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
353a0 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
353b0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
353c0 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
353d0 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
353e0 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
353f0 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
35400 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
35410 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
35420 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
35430 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
35440 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
35450 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
35460 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
35470 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
35480 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
35490 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
354a0 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
354b0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
354c0 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
354d0 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
354e0 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
354f0 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
35500 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
35510 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
35520 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
35530 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
35540 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
35550 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
35560 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
35570 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
35580 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
35590 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
355a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
355b0 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
355c0 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
355d0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
355e0 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
355f0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
35600 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
35610 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
35620 0a 20 20 69 66 28 20 72 63 20 29 20 65 4e 65 77  .  if( rc ) eNew
35630 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20   = eOld;.  eNew 
35640 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
35650 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
35660 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
35670 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
35680 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
35690 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
356a0 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
356b0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
356c0 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
356d0 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
356e0 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
356f0 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
35700 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
35710 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
35720 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
35730 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20  ncoding);.  if( 
35740 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
35750 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
35760 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
35770 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
35780 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
35790 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
357a0 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
357b0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
357c0 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
357d0 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31  pcode: Vacuum P1
357e0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56   * * * *.**.** V
357f0 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
35800 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50   database P1.  P
35810 31 20 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e  1 is 0 for "main
35820 22 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65  ", and 2 or more
35830 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63  .** for an attac
35840 68 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 54  hed database.  T
35850 68 65 20 22 74 65 6d 70 22 20 64 61 74 61 62 61  he "temp" databa
35860 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61  se may not be va
35870 63 75 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  cuumed..*/.case 
35880 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61  OP_Vacuum: {.  a
35890 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
358a0 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ly==0 );.  rc = 
358b0 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
358c0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
358d0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66  , pOp->p1);.  if
358e0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
358f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
35900 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
35910 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
35920 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
35930 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
35940 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
35950 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
35960 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
35970 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
35980 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
35990 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
359a0 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
359b0 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
359c0 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
359d0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
359e0 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
359f0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
35a00 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
35a10 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
35a20 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
35a30 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
35a40 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
35a50 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
35a60 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
35a70 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
35a80 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
35a90 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
35aa0 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
35ab0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
35ac0 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ly==0 );.  pBt =
35ad0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
35ae0 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
35af0 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
35b00 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62  cuum(pBt);.  Vdb
35b10 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d  eBranchTaken(rc=
35b20 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b  =SQLITE_DONE,2);
35b30 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
35b40 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
35b50 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
35b60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
35b70 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
35b80 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  OK;.    goto jum
35b90 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
35ba0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
35bb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
35bc0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
35bd0 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70  ** Cause precomp
35be0 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  iled statements 
35bf0 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e  to expire.  When
35c00 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   an expired stat
35c10 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63  ement.** is exec
35c20 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  uted using sqlit
35c30 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c  e3_step() it wil
35c40 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74  l either automat
35c50 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70  ically.** reprep
35c60 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20 69  are itself (if i
35c70 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  t was originally
35c80 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 73   created using s
35c90 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
35ca0 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69  2()).** or it wi
35cb0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c  ll fail with SQL
35cc0 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a  ITE_SCHEMA..** .
35cd0 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74  ** If P1 is 0, t
35ce0 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74  hen all SQL stat
35cf0 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78  ements become ex
35d00 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20  pired. If P1 is 
35d10 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65  non-zero,.** the
35d20 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65  n only the curre
35d30 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73  ntly executing s
35d40 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69  tatement is expi
35d50 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  red..*/.case OP_
35d60 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
35d70 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
35d80 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
35d90 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
35da0 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
35db0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
35dc0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
35dd0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
35de0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
35df0 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
35e00 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
35e10 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
35e20 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50  s: iDb=P1 root=P
35e30 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a  2 write=P3.**.**
35e40 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
35e50 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
35e60 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
35e70 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
35e80 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
35e90 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
35ea0 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
35eb0 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
35ec0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
35ed0 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
35ee0 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
35ef0 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
35f00 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
35f10 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
35f20 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
35f30 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
35f40 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
35f50 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
35f60 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
35f70 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
35f80 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
35f90 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
35fa0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
35fb0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
35fc0 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
35fd0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
35fe0 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
35ff0 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
36000 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
36010 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
36020 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
36030 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
36040 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
36050 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 6e  u8)pOp->p3;.#ifn
36060 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
36070 43 4f 4e 43 55 52 52 45 4e 54 0a 20 20 69 66 28  CONCURRENT.  if(
36080 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 26 26 20   isWriteLock && 
36090 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20  db->bConcurrent 
360a0 26 26 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 29 7b  && pOp->p2==1 ){
360b0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
360c0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
360d0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
360e0 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74  .        "cannot
360f0 20 6d 6f 64 69 66 79 20 64 61 74 61 62 61 73 65   modify database
36100 20 73 63 68 65 6d 61 20 77 69 74 68 69 6e 20 43   schema within C
36110 4f 4e 43 55 52 52 45 4e 54 20 74 72 61 6e 73 61  ONCURRENT transa
36120 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74  ction");.    got
36130 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36140 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rror;.  }.#endif
36150 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f  .  if( isWriteLo
36160 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c  ck || 0==(db->fl
36170 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55  ags&SQLITE_ReadU
36180 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20  ncommitted) ){. 
36190 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d     int p1 = pOp-
361a0 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74  >p1; .    assert
361b0 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62  ( p1>=0 && p1<db
361c0 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73  ->nDb );.    ass
361d0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
361e0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31  p->btreeMask, p1
361f0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
36200 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20   isWriteLock==0 
36210 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  || isWriteLock==
36220 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  1 );.    rc = sq
36230 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61  lite3BtreeLockTa
36240 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e  ble(db->aDb[p1].
36250 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73  pBt, pOp->p2, is
36260 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20  WriteLock);.    
36270 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
36280 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53  if( (rc&0xFF)==S
36290 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a  QLITE_LOCKED ){.
362a0 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68          const ch
362b0 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ar *z = pOp->p4.
362c0 7a 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  z;.        sqlit
362d0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
362e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69  database table i
362f0 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a  s locked: %s", z
36300 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
36310 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36320 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
36330 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
36340 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
36350 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
36360 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
36370 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36380 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
36390 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
363a0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
363b0 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
363c0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
363d0 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
363e0 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
363f0 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
36400 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
36410 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
36420 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
36430 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
36440 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
36450 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
36460 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
36470 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
36480 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
36490 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74  hod. If it is, t
364a0 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  he error.** code
364b0 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
364c0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
364d0 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
364e0 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56  : {.  VTable *pV
364f0 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70  Tab;.  pVTab = p
36500 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
36510 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
36520 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29  Begin(db, pVTab)
36530 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20  ;.  if( pVTab ) 
36540 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
36550 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62  tErrmsg(p, pVTab
36560 2d 3e 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  ->pVtab);.  if( 
36570 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36580 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36590 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
365a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
365b0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
365c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
365d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
365e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65  ./* Opcode: VCre
365f0 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ate P1 P2 * * *.
36600 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65  **.** P2 is a re
36610 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64  gister that hold
36620 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
36630 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
36640 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31   database .** P1
36650 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61  . Call the xCrea
36660 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  te method for th
36670 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
36680 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
36690 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
366a0 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
366b0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
366c0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
366d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
366e0 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ab;  /* Name of 
366f0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
36700 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26  e */..  memset(&
36710 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sMem, 0, sizeof(
36720 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64  sMem));.  sMem.d
36730 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63  b = db;.  /* Bec
36740 61 75 73 65 20 50 32 20 69 73 20 61 6c 77 61 79  ause P2 is alway
36750 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  s a static strin
36760 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69  g, it is impossi
36770 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ble for the.  **
36780 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
36790 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f  opy() to fail */
367a0 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d  .  assert( (aMem
367b0 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20  [pOp->p2].flags 
367c0 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b  & MEM_Str)!=0 );
367d0 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d  .  assert( (aMem
367e0 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20  [pOp->p2].flags 
367f0 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30  & MEM_Static)!=0
36800 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
36810 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73  e3VdbeMemCopy(&s
36820 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Mem, &aMem[pOp->
36830 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2]);.  assert( 
36840 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
36850 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74  .  zTab = (const
36860 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
36870 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29  alue_text(&sMem)
36880 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61 62  ;.  assert( zTab
36890 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   || db->mallocFa
368a0 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54  iled );.  if( zT
368b0 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  ab ){.    rc = s
368c0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
368d0 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  eate(db, pOp->p1
368e0 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72  , zTab, &p->zErr
368f0 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Msg);.  }.  sqli
36900 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
36910 65 28 26 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20  e(&sMem);.  if( 
36920 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36930 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36940 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
36950 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
36960 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
36970 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36980 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36990 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73  ./* Opcode: VDes
369a0 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a  troy P1 * * P4 *
369b0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65  .**.** P4 is the
369c0 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75   name of a virtu
369d0 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61  al table in data
369e0 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74  base P1.  Call t
369f0 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68  he xDestroy meth
36a00 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  od.** of that ta
36a10 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
36a20 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62  VDestroy: {.  db
36a30 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20  ->nVDestroy++;. 
36a40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
36a50 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c  bCallDestroy(db,
36a60 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
36a70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65  4.z);.  db->nVDe
36a80 73 74 72 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72  stroy--;.  if( r
36a90 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
36aa0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
36ab0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
36ac0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
36ad0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
36ae0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
36af0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
36b00 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e  /* Opcode: VOpen
36b10 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
36b20 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
36b30 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
36b40 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
36b50 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
36b60 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69  ructure..** P1 i
36b70 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  s a cursor numbe
36b80 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  r.  This opcode 
36b90 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74  opens a cursor t
36ba0 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  o the virtual.**
36bb0 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65   table and store
36bc0 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e  s that cursor in
36bd0 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P1..*/.case OP_
36be0 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  VOpen: {.  VdbeC
36bf0 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73  ursor *pCur;.  s
36c00 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
36c10 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c  or *pVCur;.  sql
36c20 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
36c30 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
36c40 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
36c50 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  e;..  assert( p-
36c60 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
36c70 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 43 75  pCur = 0;.  pVCu
36c80 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d  r = 0;.  pVtab =
36c90 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
36ca0 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74  pVtab;.  if( pVt
36cb0 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70  ab==0 || NEVER(p
36cc0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30  Vtab->pModule==0
36cd0 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ) ){.    rc = SQ
36ce0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
36cf0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36d00 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
36d10 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
36d20 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d  >pModule;.  rc =
36d30 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
36d40 70 56 74 61 62 2c 20 26 70 56 43 75 72 29 3b 0a  pVtab, &pVCur);.
36d50 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
36d60 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
36d70 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ab);.  if( rc ) 
36d80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
36d90 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49  o_error;..  /* I
36da0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
36db0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
36dc0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56  se class */.  pV
36dd0 43 75 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74  Cur->pVtab = pVt
36de0 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61  ab;..  /* Initia
36df0 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72  lize vdbe cursor
36e00 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75   object */.  pCu
36e10 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
36e20 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  or(p, pOp->p1, 0
36e30 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54  , -1, CURTYPE_VT
36e40 41 42 29 3b 0a 20 20 69 66 28 20 70 43 75 72 20  AB);.  if( pCur 
36e50 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 75 63 2e  ){.    pCur->uc.
36e60 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20  pVCur = pVCur;. 
36e70 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b     pVtab->nRef++
36e80 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
36e90 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f  ssert( db->mallo
36ea0 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 70  cFailed );.    p
36eb0 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70  Module->xClose(p
36ec0 56 43 75 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20  VCur);.    goto 
36ed0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
36ee0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
36ef0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36f00 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
36f10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36f20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
36f30 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
36f40 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
36f50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c  ** Synopsis: ipl
36f60 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27  an=r[P3] zplan='
36f70 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P4'.**.** P1 is 
36f80 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
36f90 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
36fa0 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
36fb0 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
36fc0 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
36fd0 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
36fe0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
36ff0 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
37000 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
37010 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
37020 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
37030 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
37040 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
37050 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
37060 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
37070 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
37080 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
37090 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
370a0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
370b0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
370c0 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
370d0 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
370e0 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
370f0 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
37100 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
37110 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
37120 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
37130 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
37140 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
37150 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
37160 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
37170 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
37180 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
37190 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
371a0 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
371b0 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
371c0 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
371d0 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
371e0 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
371f0 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
37200 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
37210 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
37220 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
37230 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
37240 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
37250 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
37260 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
37270 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
37280 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
37290 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
372a0 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
372b0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
372c0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
372d0 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
372e0 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
372f0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
37300 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
37310 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
37320 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
37330 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
37340 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
37350 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
37360 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
37370 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79   pArgc = &pQuery
37380 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  [1];.  pCur = p-
37390 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
373a0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
373b0 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b  Valid(pQuery) );
373c0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
373d0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
373e0 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
373f0 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
37400 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
37410 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63  pVCur = pCur->uc
37420 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20  .pVCur;.  pVtab 
37430 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  = pVCur->pVtab;.
37440 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
37450 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
37460 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
37470 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
37480 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
37490 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
374a0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
374b0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
374c0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
374d0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
374e0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
374f0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
37500 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
37510 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
37520 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20  method */.  res 
37530 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70  = 0;.  apArg = p
37540 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69  ->apArg;.  for(i
37550 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b   = 0; i<nArg; i+
37560 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d  +){.    apArg[i]
37570 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a   = &pArgc[i+1];.
37580 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75    }.  rc = pModu
37590 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75  le->xFilter(pVCu
375a0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
375b0 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
375c0 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  g);.  sqlite3Vta
375d0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
375e0 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
375f0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
37600 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72  ue_to_error;.  r
37610 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
37620 6f 66 28 70 56 43 75 72 29 3b 0a 20 20 70 43 75  of(pVCur);.  pCu
37630 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
37640 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
37650 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
37660 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
37670 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
37680 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
37690 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
376a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
376b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
376c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
376d0 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20  Opcode: VColumn 
376e0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
376f0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
37700 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a  vcolumn(P2).**.*
37710 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75  * Store the valu
37720 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63  e of the P2-th c
37730 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  olumn of.** the 
37740 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75  row of the virtu
37750 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68  al-table that th
37760 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20  e .** P1 cursor 
37770 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69  is pointing to i
37780 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
37790 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c  .*/.case OP_VCol
377a0 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  umn: {.  sqlite3
377b0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
377c0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
377d0 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20  dule *pModule;. 
377e0 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73   Mem *pDest;.  s
377f0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73  qlite3_context s
37800 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65  Context;..  Vdbe
37810 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70  Cursor *pCur = p
37820 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
37830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
37840 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
37850 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73  YPE_VTAB );.  as
37860 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
37870 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
37880 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
37890 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
378a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
378b0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
378c0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
378d0 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c    if( pCur->null
378e0 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Row ){.    sqlit
378f0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
37900 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65  (pDest);.    bre
37910 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20  ak;.  }.  pVtab 
37920 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  = pCur->uc.pVCur
37930 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
37940 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
37950 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ule;.  assert( p
37960 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20  Module->xColumn 
37970 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f  );.  memset(&sCo
37980 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66  ntext, 0, sizeof
37990 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73  (sContext));.  s
379a0 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70  Context.pOut = p
379b0 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79  Dest;.  MemSetTy
379c0 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45  peFlag(pDest, ME
379d0 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20  M_Null);.  rc = 
379e0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
379f0 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c  (pCur->uc.pVCur,
37a00 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d   &sContext, pOp-
37a10 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2);.  sqlite3V
37a20 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
37a30 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
37a40 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
37a50 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43  r ){.    rc = sC
37a60 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a  ontext.isError;.
37a70 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
37a80 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
37a90 70 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29  pDest, encoding)
37aa0 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
37ab0 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
37ac0 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
37ad0 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
37ae0 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
37af0 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44  VdbeMemTooBig(pD
37b00 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  est) ){.    goto
37b10 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
37b20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
37b30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37b40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
37b50 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
37b60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
37b70 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
37b80 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
37b90 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
37ba0 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  VNext P1 P2 * * 
37bb0 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  *.**.** Advance 
37bc0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31  virtual table P1
37bd0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
37be0 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73   in its result s
37bf0 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  et and.** jump t
37c00 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
37c10 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69  .  Or, if the vi
37c20 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
37c30 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65  reached.** the e
37c40 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74  nd of its result
37c50 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20   set, then fall 
37c60 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
37c70 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
37c80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78  .*/.case OP_VNex
37c90 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  t: {   /* jump *
37ca0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
37cb0 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
37cc0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
37cd0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
37ce0 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  res;.  VdbeCurso
37cf0 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20  r *pCur;..  res 
37d00 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  = 0;.  pCur = p-
37d10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
37d20 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
37d30 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
37d40 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28  PE_VTAB );.  if(
37d50 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29   pCur->nullRow )
37d60 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  {.    break;.  }
37d70 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
37d80 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62  >uc.pVCur->pVtab
37d90 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
37da0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
37db0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
37dc0 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20  >xNext );..  /* 
37dd0 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74  Invoke the xNext
37de0 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  () method of the
37df0 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69   module. There i
37e00 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65  s no way for the
37e10 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67  .  ** underlying
37e20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
37e30 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  to return an err
37e40 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73  or if one occurs
37e50 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65   during.  ** xNe
37e60 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69  xt(). Instead, i
37e70 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  f an error occur
37e80 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72  s, true is retur
37e90 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20  ned (indicating 
37ea0 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20  that .  ** data 
37eb0 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e  is available) an
37ec0 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  d the error code
37ed0 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78   returned when x
37ee0 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73  Column or.  ** s
37ef0 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64  ome other method
37f00 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64   is next invoked
37f10 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72   on the save vir
37f20 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f  tual table curso
37f30 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70  r..  */.  rc = p
37f40 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43  Module->xNext(pC
37f50 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20  ur->uc.pVCur);. 
37f60 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
37f70 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
37f80 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  b);.  if( rc ) g
37f90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
37fa0 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20  _error;.  res = 
37fb0 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43  pModule->xEof(pC
37fc0 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20  ur->uc.pVCur);. 
37fd0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
37fe0 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20  (!res,2);.  if( 
37ff0 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49  !res ){.    /* I
38000 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c  f there is data,
38010 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
38020 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
38030 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
38040 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a  _interrupt;.  }.
38050 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
38060 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65  _interrupt;.}.#e
38070 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
38080 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
38090 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
380a0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
380b0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
380c0 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20   VRename P1 * * 
380d0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
380e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
380f0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
38100 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
38110 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
38120 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
38130 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
38140 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d  esponding xRenam
38150 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61  e method. The va
38160 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74  lue.** in regist
38170 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20  er P1 is passed 
38180 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67  as the zName arg
38190 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65  ument to the xRe
381a0 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a  name method..*/.
381b0 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a  case OP_VRename:
381c0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
381d0 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20  b *pVtab;.  Mem 
381e0 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62  *pName;..  pVtab
381f0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
38200 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65  ->pVtab;.  pName
38210 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
38220 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74  ];.  assert( pVt
38230 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ab->pModule->xRe
38240 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74  name );.  assert
38250 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61  ( memIsValid(pNa
38260 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  me) );.  assert(
38270 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
38280 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
38290 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61  ACE(pOp->p1, pNa
382a0 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  me);.  assert( p
382b0 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Name->flags & ME
382c0 4d 5f 53 74 72 20 29 3b 0a 20 20 74