/ Hex Artifact Content
Login

Artifact 680c118a20b4b496644001e7ff4819c3e3ff8d85:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fa0: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a  T_BUILTIN_TEST).
0fb0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
0fc0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20  MAX_BLOBSIZE(P) 
0fd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0fe0: 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  ze(P).#else.# de
0ff0: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1000: 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64  BLOBSIZE(P).#end
1010: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  if../*.** Invoke
1020: 20 74 68 65 20 56 44 42 45 20 63 6f 76 65 72 61   the VDBE covera
1030: 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20  ge callback, if 
1040: 74 68 61 74 20 63 61 6c 6c 62 61 63 6b 20 69 73  that callback is
1050: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 69 73 0a   defined.  This.
1060: 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 75 73  ** feature is us
1070: 65 64 20 66 6f 72 20 74 65 73 74 20 73 75 69 74  ed for test suit
1080: 65 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c  e validation onl
1090: 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  y and does not a
10a0: 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64  ppear an.** prod
10b0: 75 63 74 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a  uction builds..*
10c0: 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74  *.** M is an int
10d0: 65 67 65 72 2c 20 32 20 6f 72 20 33 2c 20 74 68  eger, 2 or 3, th
10e0: 61 74 20 69 6e 64 69 63 65 73 20 68 6f 77 20 6d  at indices how m
10f0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
1100: 79 73 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  ys the.** branch
1110: 20 63 61 6e 20 67 6f 2e 20 20 49 74 20 69 73 20   can go.  It is 
1120: 75 73 75 61 6c 6c 79 20 32 2e 20 20 22 49 22 20  usually 2.  "I" 
1130: 69 73 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e  is the direction
1140: 20 74 68 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67   the branch.** g
1150: 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73 20 66 61  oes.  0 means fa
1160: 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20 20 31 20  lls through.  1 
1170: 6d 65 61 6e 73 20 62 72 61 6e 63 68 20 69 73 20  means branch is 
1180: 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20  taken.  2 means 
1190: 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c  the.** second al
11a0: 74 65 72 6e 61 74 69 76 65 20 62 72 61 6e 63 68  ternative branch
11b0: 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a   is taken..**.**
11c0: 20 69 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65   iSrcLine is the
11d0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e   source code lin
11e0: 65 20 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49  e (from the __LI
11f0: 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74  NE__ macro) that
1200: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68  .** generated th
1210: 65 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  e VDBE instructi
1220: 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  on.  This instru
1230: 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73 75 6d 65  mentation assume
1240: 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f  s that all.** so
1250: 75 72 63 65 20 63 6f 64 65 20 69 73 20 69 6e 20  urce code is in 
1260: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 28 74  a single file (t
1270: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 29  he amalgamation)
1280: 2e 20 20 53 70 65 63 69 61 6c 20 76 61 6c 75 65  .  Special value
1290: 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20 66 6f 72  s 1.** and 2 for
12a0: 20 74 68 65 20 69 53 72 63 4c 69 6e 65 20 70 61   the iSrcLine pa
12b0: 72 61 6d 65 74 65 72 20 6d 65 61 6e 20 74 68 61  rameter mean tha
12c0: 74 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  t this particula
12d0: 72 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a 20 61  r branch is.** a
12e0: 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f 72 20 6e  lways taken or n
12f0: 65 76 65 72 20 74 61 6b 65 6e 2c 20 72 65 73 70  ever taken, resp
1300: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66  ectively..*/.#if
1310: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1320: 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a  _VDBE_COVERAGE).
1330: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1340: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65  nchTaken(I,M).#e
1350: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62  lse.# define Vdb
1360: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1370: 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  ) vdbeTakeBranch
1380: 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49  (pOp->iSrcLine,I
1390: 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69  ,M).  static voi
13a0: 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  d vdbeTakeBranch
13b0: 28 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75  (int iSrcLine, u
13c0: 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20  8 I, u8 M){.    
13d0: 69 66 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20  if( iSrcLine<=2 
13e0: 26 26 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69  && ALWAYS(iSrcLi
13f0: 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d  ne>0) ){.      M
1400: 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20   = iSrcLine;.   
1410: 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65     /* Assert the
1420: 20 74 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f   truth of VdbeCo
1430: 76 65 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65  verageAlwaysTake
1440: 6e 28 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a  n() and .      *
1450: 2a 20 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65  * VdbeCoverageNe
1460: 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20  verTaken() */.  
1470: 20 20 20 20 61 73 73 65 72 74 28 20 28 4d 20 26      assert( (M &
1480: 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65   I)==I );.    }e
1490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73  lse{.      if( s
14a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14b0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
14c0: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
14d0: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73  O_TEST*/.      s
14e0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14f0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73  ig.xVdbeBranch(s
1500: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1510: 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72  ig.pVdbeBranchAr
1520: 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g,.             
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e           iSrcLin
1550: 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20  e,I,M);.    }.  
1560: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1570: 43 6f 6e 76 65 72 74 20 74 68 65 20 67 69 76 65  Convert the give
1580: 6e 20 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20  n register into 
1590: 61 20 73 74 72 69 6e 67 20 69 66 20 69 74 20 69  a string if it i
15a0: 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65  sn't one.** alre
15b0: 61 64 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  ady. Return non-
15c0: 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63  zero if a malloc
15d0: 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65  () fails..*/.#de
15e0: 66 69 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50  fine Stringify(P
15f0: 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28  , enc) \.   if((
1600: 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (P)->flags&(MEM_
1610: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
1620: 30 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  0 && sqlite3Vdbe
1630: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65  MemStringify(P,e
1640: 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20 20 7b 20  nc,0)) \.     { 
1650: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a  goto no_mem; }..
1660: 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65 72  /*.** An ephemer
1670: 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  al string value 
1680: 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74 68  (signified by th
1690: 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61 67  e MEM_Ephem flag
16a0: 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61 20  ) contains.** a 
16b0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79 6e  pointer to a dyn
16c0: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
16d0: 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65 20  ed string where 
16e0: 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69 74  some other entit
16f0: 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73 69  y.** is responsi
1700: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
1710: 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e 67  ting that string
1720: 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 72  .  Because the r
1730: 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73 20  egister.** does 
1740: 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20  not control the 
1750: 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68 74  string, it might
1760: 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74 68   be deleted with
1770: 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65 72  out the register
1780: 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a  .** knowing it..
1790: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
17a0: 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 65  ne converts an e
17b0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
17c0: 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  into a dynamical
17d0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  ly allocated.** 
17e0: 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65 20  string that the 
17f0: 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66 20  register itself 
1800: 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f 74  controls.  In ot
1810: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a 2a  her words, it.**
1820: 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45 4d   converts an MEM
1830: 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69 6e  _Ephem string in
1840: 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  to a string with
1850: 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e   P.z==P.zMalloc.
1860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1870: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1880: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1890: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
18a0: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
18b0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
18c0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
18d0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
18e0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18f0: 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f  the cursor was o
1900: 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1910: 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70  OP_OpenSorter op
1920: 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  code. */.#define
1930: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
1940: 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  )->eCurType==CUR
1950: 54 59 50 45 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a  TYPE_SORTER)../*
1960: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62  .** Allocate Vdb
1970: 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69  eCursor number i
1980: 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70  Cur.  Return a p
1990: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52  ointer to it.  R
19a0: 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66  eturn NULL.** if
19b0: 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d   we run out of m
19c0: 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  emory..*/.static
19d0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c   VdbeCursor *all
19e0: 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56  ocateCursor(.  V
19f0: 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  dbe *p,         
1a00: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
1a10: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
1a20: 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20   int iCur,      
1a30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a40: 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43  of the new VdbeC
1a50: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  ursor */.  int n
1a60: 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20  Field,          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
1a80: 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  elds in the tabl
1a90: 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20  e or index */.  
1aa0: 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20  int iDb,        
1ab0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1ac0: 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c  e the cursor bel
1ad0: 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a  ongs to, or -1 *
1ae0: 2f 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 20  /.  u8 eCurType 
1af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70            /* Typ
1b00: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 75 72  e of the new cur
1b10: 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  sor */.){.  /* F
1b20: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1b30: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1b40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b50: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1b60: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1b70: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1b80: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b90: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ba0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1bb0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bc0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bd0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1be0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1bf0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1c00: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1c10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1c20: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1c30: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1c40: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1c50: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1c60: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1c70: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1c80: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1c90: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1ca0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1cb0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1cc0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1cd0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ce0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1cf0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1d00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1d10: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1d20: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1d30: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1d40: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1d50: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1d60: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1d70: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1d80: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1d90: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1da0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1dc0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1dd0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 65 6d   **.  ** The mem
1df0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 63 75 72  ory cell for cur
1e00: 73 6f 72 20 30 20 69 73 20 61 4d 65 6d 5b 30 5d  sor 0 is aMem[0]
1e10: 2e 20 54 68 65 20 72 65 73 74 20 61 72 65 20 61  . The rest are a
1e20: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 20 20  llocated from.  
1e30: 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  ** the top of th
1e40: 65 20 72 65 67 69 73 74 65 72 20 73 70 61 63 65  e register space
1e50: 2e 20 20 43 75 72 73 6f 72 20 31 20 69 73 20 61  .  Cursor 1 is a
1e60: 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 31 5d  t Mem[p->nMem-1]
1e70: 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72 20 32 20  ..  ** Cursor 2 
1e80: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
1e90: 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20 66 6f 72  m-2]. And so for
1ea0: 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  th..  */.  Mem *
1eb0: 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30 20 3f 20  pMem = iCur>0 ? 
1ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ed0: 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61 4d 65 6d  -iCur] : p->aMem
1ee0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ef0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f00: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f10: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1f20: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1f30: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1f40: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1f50: 20 20 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55     (eCurType==CU
1f60: 52 54 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69  RTYPE_BTREE?sqli
1f70: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f80: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1f90: 72 74 28 20 69 43 75 72 3e 3d 30 20 26 26 20 69  rt( iCur>=0 && i
1fa0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
1fb0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
1fc0: 5b 69 43 75 72 5d 20 29 7b 20 2f 2a 4f 50 54 49  [iCur] ){ /*OPTI
1fd0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
1fe0: 45 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56  E*/.    sqlite3V
1ff0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2000: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2010: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2020: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2030: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2040: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2050: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2060: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2080: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
2090: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
20a0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
20b0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20c0: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43  r));.    pCx->eC
20d0: 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79 70  urType = eCurTyp
20e0: 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  e;.    pCx->iDb 
20f0: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
2100: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
2110: 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73 65  .    pCx->aOffse
2120: 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65 5b  t = &pCx->aType[
2130: 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28  nField];.    if(
2140: 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59   eCurType==CURTY
2150: 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2160: 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f    pCx->uc.pCurso
2170: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2180: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2190: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
21a0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
21b0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
21c0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
21d0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
21e0: 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  o(pCx->uc.pCurso
21f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2200: 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f  return pCx;.}../
2210: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2220: 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f  ert a value into
2230: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2240: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20  sentation if we 
2250: 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74  can.** do so wit
2260: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66  hout loss of inf
2270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  ormation.  In ot
2280: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2290: 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b  e string.** look
22a0: 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  s like a number,
22b0: 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f   convert it into
22c0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69   a number.  If i
22d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f  t does not.** lo
22e0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
22f0: 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65  , leave it alone
2300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62  ..**.** If the b
2310: 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69  TryForInt flag i
2320: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74  s true, then ext
2330: 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64  ra effort is mad
2340: 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20  e to give.** an 
2350: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2360: 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73  tation.  Strings
2370: 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20   that look like 
2380: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a  floating point.*
2390: 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68 69  * values but whi
23a0: 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74  ch have no fract
23b0: 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20  ional component 
23c0: 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30  (example: '48.00
23d0: 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20  ').** will have 
23e0: 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73  a MEM_Int repres
23f0: 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54  entation when bT
2400: 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65  ryForInt is true
2410: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46  ..**.** If bTryF
2420: 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20  orInt is false, 
2430: 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  then if the inpu
2440: 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  t string contain
2450: 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70  s a decimal.** p
2460: 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74  oint or exponent
2470: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68  ial notation, th
2480: 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79  e result is only
2490: 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a   MEM_Real, even.
24a0: 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ** if there is a
24b0: 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72 20  n exact integer 
24c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24d0: 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a  f the quantity..
24e0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
24f0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2500: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69  ity(Mem *pRec, i
2510: 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a  nt bTryForInt){.
2520: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2530: 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20  .  i64 iValue;. 
2540: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2550: 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 28  enc;.  assert( (
2560: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
2570: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d  EM_Str|MEM_Int|M
2580: 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53  EM_Real))==MEM_S
2590: 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
25a0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
25b0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
25c0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
25d0: 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  urn;.  if( 0==sq
25e0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
25f0: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2600: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2610: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
2620: 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d  Value;.    pRec-
2630: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e  >flags |= MEM_In
2640: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2650: 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c  pRec->u.r = rVal
2660: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2680: 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f 72  .    if( bTryFor
2690: 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64 62  Int ) sqlite3Vdb
26a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
26b0: 28 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  (pRec);.  }.}../
26c0: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
26d0: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
26e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
26f0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2710: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2720: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2730: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2740: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2750: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2760: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2770: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2780: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
27a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
27b0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
27c0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
27d0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
27e0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
27f0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2800: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2810: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2820: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2830: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2840: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2850: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2860: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2870: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2880: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2890: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
28a0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
28b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
28c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  .** SQLITE_AFF_B
28d0: 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  LOB:.**    No-op
28e0: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
28f0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2900: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2910: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2930: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2940: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2950: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2960: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2970: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2980: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
29a0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
29b0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
29c0: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
29d0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
29e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
29f0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a00: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a30: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2a50: 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28 20  ERIC );.    if( 
2a60: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
2a70: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a  EM_Int)==0 ){ /*
2a80: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
2a90: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
2aa0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2ab0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
2ac0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
2ad0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  c->flags & MEM_S
2ae0: 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69  tr ) applyNumeri
2af0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2b00: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2b20: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b30: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  }.    }.  }else 
2b50: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2b60: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2b70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2b80: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2b90: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2ba0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2bb0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2bc0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2bd0: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2be0: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2bf0: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2c00: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2c10: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 77  sentation.  It w
2c20: 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73  ould be harmless
2c30: 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20 63   to repeat the c
2c40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20 20  onversion if .  
2c50: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 6c    ** there is al
2c60: 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20 72  ready a string r
2c70: 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70 6f  ep, but it is po
2c80: 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74 65  intless to waste
2c90: 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50   those.    ** CP
2ca0: 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20  U cycles. */.   
2cb0: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2cc0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b  lags&MEM_Str) ){
2cd0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
2ce0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
2cf0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2d00: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2d10: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 20  Int)) ){.       
2d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d30: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
2d40: 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  nc, 1);.      }.
2d50: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2d60: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2d70: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
2d80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2d90: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2da0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2db0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2dc0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2dd0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2de0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2df0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2e00: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2e10: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2e20: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2e30: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2e40: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2e50: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2e60: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2e70: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2e80: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2e90: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2ea0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2eb0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2ec0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2ed0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20  e *pVal){.  int 
2ee0: 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f  eType = sqlite3_
2ef0: 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29  value_type(pVal)
2f00: 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d 53  ;.  if( eType==S
2f10: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
2f20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2f30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61 70  em*)pVal;.    ap
2f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2f50: 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20  ty(pMem, 0);.   
2f60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2f70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2f80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2f90: 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  eType;.}../*.** 
2fa0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2fb0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2fc0: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2fd0: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2fe0: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2ff0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
3000: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
3010: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
3020: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
3030: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
3040: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
3050: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
3060: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
3070: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
3080: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ity, enc);.}../*
3090: 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e 74  .** pMem current
30a0: 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20  ly only holds a 
30b0: 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72 20  string type (or 
30c0: 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68 61  maybe a BLOB tha
30d0: 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65  t we can.** inte
30e0: 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69 6e  rpret as a strin
30f0: 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f 29  g if we want to)
3100: 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20 63  .  Compute its c
3110: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3120: 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69 66  numeric type, if
3130: 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20 74   has one.  Set t
3140: 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64  he pMem->u.r and
3150: 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c 64   pMem->u.i field
3160: 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c 79  s.** accordingly
3170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20  ..*/.static u16 
3180: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
3190: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
31c0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
31d0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
31e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
31f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3200: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
3210: 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
3220: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
3230: 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d  &pMem->u.r, pMem
3240: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3250: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3260: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
3270: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
3280: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
3290: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
32a0: 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  enc)==SQLITE_OK 
32b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
32c0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
32d0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
32e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32f0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3300: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3310: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3320: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3330: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3340: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3350: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3360: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3370: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3380: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3390: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
33a0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
33b0: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
33c0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
33d0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
33e0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
33f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3400: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
3410: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
3420: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3430: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a  _Int|MEM_Real);.
3440: 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e    }.  if( pMem->
3450: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3460: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
3470: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65    return compute
3480: 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d  NumericType(pMem
3490: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a0: 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  0;.}..#ifdef SQL
34b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
34c0: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
34d0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
34e0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
34f0: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
3500: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
3510: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
3520: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3530: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3540: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
3550: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
3560: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
3570: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
3580: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
3590: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
35a0: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
35b0: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
35c0: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
35d0: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
35e0: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
35f0: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
3600: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3610: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
3620: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3630: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3640: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3650: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3660: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3670: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
3680: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3690: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
36a0: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
36b0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
36c0: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
36d0: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
36e0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
36f0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3700: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3720: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
3730: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
3760: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3770: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3780: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3790: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
37a0: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
37b0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
37c0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
37d0: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
37e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
37f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3800: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3810: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
3820: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
3830: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
3840: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3860: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
3870: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3880: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3890: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
38a0: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
38b0: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
38c0: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
38d0: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
38e0: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
38f0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3900: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3910: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3920: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3930: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3940: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3950: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
3960: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
3970: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3980: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
3990: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
39a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
39b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
39d0: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
39e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
39f0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
3a00: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
3a10: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
3a20: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
3a30: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3a40: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3a50: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3a60: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3a70: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3a80: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3a90: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3aa0: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3ab0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3ac0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3ad0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3ae0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3af0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3b00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
3b10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3b20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3b30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b50: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3b60: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3b70: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3b80: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3b90: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3ba0: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3bb0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3bc0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3bd0: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3be0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3bf0: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
3c00: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
3c10: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
3c20: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
3c30: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
3c40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
3c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3c60: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3c70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3c80: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3c90: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3ca0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3cb0: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3cc0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3cd0: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3ce0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3cf0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3d00: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
3d10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3d20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3d30: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
3d40: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
3d50: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3d60: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3d70: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3d80: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3d90: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3da0: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3db0: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3dc0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3dd0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3de0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3df0: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3e00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
3e10: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3e20: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
3e30: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
3e40: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
3e50: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3e70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3e80: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3e90: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3ea0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3eb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3ec0: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3ed0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3ee0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3ef0: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3f00: 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  u.r);.#endif.  }
3f10: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3f20: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3f30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3f40: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3f50: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3f60: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3f70: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3f80: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
3f90: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
3fa0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69  , zBuf);.  }.  i
3fb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3fc0: 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e  M_Subtype ) prin
3fd0: 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25  tf(" subtype=0x%
3fe0: 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70  02x", p->eSubtyp
3ff0: 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  e);.}.static voi
4000: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
4010: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
4020: 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47  ){.  printf("REG
4030: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
4040: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
4050: 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c  (p);.  printf("\
4060: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
4070: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4080: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
4090: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
40a0: 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51   if(db->flags&SQ
40b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72  LITE_VdbeTrace)r
40c0: 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d  egisterTrace(R,M
40d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
40e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
40f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
4100: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4110: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
4120: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
4130: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
4140: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
4150: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
4160: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
4170: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
4180: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
4190: 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ..#endif..#ifnde
41a0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
41b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
41c0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
41d0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
41e0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
41f0: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
4200: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
4220: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
4230: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
4240: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
4250: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
4260: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
4270: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
4280: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
4290: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
42a0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
42b0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
42c0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
42d0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
42e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
42f0: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
4300: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
4310: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
4320: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
4330: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
4340: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
4350: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
4360: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
4370: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
4380: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
4390: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
43a0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
43b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
43c0: 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70  gister of pOp->p
43d0: 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72  2 after first pr
43e0: 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65  eparing it to be
43f0: 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20  .** overwritten 
4400: 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20  with an integer 
4410: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4420: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
4430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4440: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65  easeWithClear(Me
4450: 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69  m *pOut){.  sqli
4460: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4470: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
4480: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
44a0: 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f  .}.static Mem *o
44b0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64  ut2Prerelease(Vd
44c0: 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70  be *p, VdbeOp *p
44d0: 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  Op){.  Mem *pOut
44e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
44f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
4500: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
4520: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
4530: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
4540: 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
4550: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
4560: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
4570: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f  namic(pOut) ){ /
4580: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
4590: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74  -FALSE*/.    ret
45a0: 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61  urn out2Prerelea
45b0: 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74  seWithClear(pOut
45c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
45d0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
45e0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72  M_Int;.    retur
45f0: 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a  n pOut;.  }.}...
4600: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4610: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4620: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4630: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4640: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4650: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4660: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4670: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
46a0: 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  ){.  Op *aOp = p
46b0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
46c0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
46d0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d  p */.  Op *pOp =
46e0: 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20   aOp;           
46f0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4700: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65  ration */.#if de
4710: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4720: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
4730: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f  DBE_PROFILE).  O
4740: 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20  p *pOrigOp;     
4750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
4760: 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65  ue of pOp at the
4770: 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70   top of the loop
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
4790: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
47a0: 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74   int nExtraDelet
47b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56  e = 0;      /* V
47c0: 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54  erifies FORDELET
47d0: 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  E and AUXDELETE 
47e0: 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  flags */.#endif.
47f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4800: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4810: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4820: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4830: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4840: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4850: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4860: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4870: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4880: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4890: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
48a0: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
48b0: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
48c0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
48d0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
48e0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4900: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4910: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4920: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4930: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4940: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4950: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
4960: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4970: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4980: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
4990: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
49a0: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
49b0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
49c0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
49d0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
49e0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
49f0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4a00: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
4a10: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
4a20: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4a30: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4a40: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4a50: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4a60: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a80: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4aa0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4ab0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4ac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4ad0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4ae0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
4af0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
4b00: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
4b10: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
4b20: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4b30: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
4b40: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
4b50: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
4b60: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
4b70: 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64 65 66 20  ROWID */.#ifdef 
4b80: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75  VDBE_PROFILE.  u
4b90: 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20  64 start;       
4ba0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55            /* CPU
4bb0: 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20   clock count at 
4bc0: 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20  start of opcode 
4bd0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a  */.#endif.  /***
4be0: 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e   INSERT STACK UN
4bf0: 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20  ION HERE ***/.. 
4c00: 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69   assert( p->magi
4c10: 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
4c20: 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33  N );  /* sqlite3
4c30: 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73  _step() verifies
4c40: 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74   this */.  sqlit
4c50: 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a  e3VdbeEnter(p);.
4c60: 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
4c70: 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
4c80: 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73   /* This happens
4c90: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69   if a malloc() i
4ca0: 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20  nside a call to 
4cb0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4cc0: 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20  ext() or.    ** 
4cd0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4ce0: 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20  ext16() failed. 
4cf0: 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   */.    goto no_
4d00: 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
4d10: 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  t( p->rc==SQLITE
4d20: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
4d30: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  ff)==SQLITE_BUSY
4d40: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
4d50: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
4d60: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
4d70: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
4d80: 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  _OK;.  p->iCurre
4d90: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
4da0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
4db0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
4dc0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
4dd0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
4de0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
4df0: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
4e00: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
4e10: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
4e20: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
4e30: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
4e40: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4e50: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
4e60: 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78  BACK.  if( db->x
4e70: 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20  Progress ){.    
4e80: 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e  u32 iPrior = p->
4e90: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4ea0: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4eb0: 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  EP];.    assert(
4ec0: 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65   0 < db->nProgre
4ed0: 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72  ssOps );.    nPr
4ee0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4ef0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
4f00: 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e   (iPrior % db->n
4f10: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
4f20: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
4f30: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
4f40: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
4f50: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
4f60: 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20   p->pc==0.   && 
4f70: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4f80: 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  (SQLITE_VdbeList
4f90: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45  ing|SQLITE_VdbeE
4fa0: 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  QP|SQLITE_VdbeTr
4fb0: 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  ace))!=0.  ){.  
4fc0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
4fd0: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73   once = 1;.    s
4fe0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4ff0: 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ql(p);.    if( p
5000: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
5010: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
5020: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
5030: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
5040: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
5050: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
5060: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
5070: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
5080: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
5090: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
50a0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
50b0: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
50c0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
50d0: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
50e0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
50f0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
5100: 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[i].opcode==OP_
5110: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
5120: 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20       if( once ) 
5130: 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65  printf("VDBE Que
5140: 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20  ry Plan:\n");.  
5150: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
5160: 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34  %s\n", aOp[i].p4
5170: 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  .z);.          o
5180: 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nce = 0;.       
5190: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
51a0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
51b0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
51c0: 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e  dbeTrace )  prin
51d0: 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c  tf("VDBE Trace:\
51e0: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
51f0: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
5200: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
5210: 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63  r(pOp=&aOp[p->pc
5220: 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20  ]; 1; pOp++){.  
5230: 20 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20    /* Errors are 
5240: 64 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69  detected by indi
5250: 76 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20  vidual opcodes, 
5260: 77 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74  with an immediat
5270: 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74  e.    ** jumps t
5280: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
5290: 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73  rror. */.    ass
52a0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
52b0: 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72  OK );..    asser
52c0: 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70  t( pOp>=aOp && p
52d0: 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29  Op<&aOp[p->nOp])
52e0: 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ;.#ifdef VDBE_PR
52f0: 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20  OFILE.    start 
5300: 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  = sqlite3Hwtime(
5310: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
5320: 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20  mStep++;.#ifdef 
5330: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
5340: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
5350: 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20    if( p->anExec 
5360: 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74  ) p->anExec[(int
5370: 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23  )(pOp-aOp)]++;.#
5380: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
5390: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
53a0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
53b0: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
53c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
53d0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
53e0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
53f0: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
5400: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5410: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
5420: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
5430: 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  ), pOp);.    }.#
5440: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
5450: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
5460: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
5470: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
5480: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
5490: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
54a0: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
54b0: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
54c0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
54d0: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
54e0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
54f0: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
5500: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
5510: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
5520: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
5530: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5540: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
5550: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
5560: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
5570: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
5580: 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
5590: 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f  cking on other o
55a0: 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65  perands */.#ifde
55b0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
55c0: 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70     {.      u8 op
55d0: 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74  Property = sqlit
55e0: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
55f0: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20  [pOp->opcode];. 
5600: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5610: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31  erty & OPFLG_IN1
5620: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5630: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
5640: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5650: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
5660: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5670: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5680: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5690: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
56a0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
56b0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
56c0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
56d0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
56e0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
56f0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5700: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
5710: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20  Op->p1]);.      
5720: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5730: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5740: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
5750: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5760: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5770: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5780: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5790: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
57a0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
57b0: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
57c0: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
57d0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
57e0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
57f0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
5800: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5810: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5820: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
5830: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5840: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5850: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5860: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
5870: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5880: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
5890: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
58a0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
58b0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
58c0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
58d0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
58e0: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
58f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5900: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5910: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5920: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5930: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5940: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
5950: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5960: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5970: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5980: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
5990: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
59a0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
59b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
59c0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
59d0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
59e0: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
59f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
5a00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
5a10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5a20: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5a30: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
5a40: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
5a50: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5a60: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5a70: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5a80: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
5a90: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
5aa0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5ab0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
5ac0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5ad0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
5ae0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
5af0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
5b00: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f  _PROFILE).    pO
5b10: 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e  rigOp = pOp;.#en
5b20: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
5b30: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
5b40: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b90: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
5ba0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
5bb0: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
5bc0: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
5bd0: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
5be0: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
5bf0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
5c00: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
5c10: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
5c20: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
5c30: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
5c40: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
5c50: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
5c60: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
5c70: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
5c80: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
5c90: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
5ca0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
5cb0: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
5cc0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5cd0: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
5ce0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
5cf0: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
5d00: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
5d10: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
5d20: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
5d30: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
5d40: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
5d50: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
5d60: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
5d70: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
5d80: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
5d90: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
5da0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
5db0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
5dc0: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
5dd0: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
5de0: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
5df0: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
5e00: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
5e10: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
5e20: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
5e30: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
5e40: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
5e50: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
5e60: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
5e70: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
5e80: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
5e90: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
5ea0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
5eb0: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
5ec0: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
5ed0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
5ee0: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
5ef0: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
5f00: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
5f10: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
5f20: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
5f30: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
5f40: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
5f50: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
5f60: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
5f70: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
5f80: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
5f90: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
5fa0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
5fb0: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
5fc0: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
5fd0: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
5fe0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
5ff0: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
6000: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
6010: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
6020: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
6030: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6040: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6050: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
6060: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
6070: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
6080: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
6090: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
60a0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
60b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
60c0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
60d0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
60e0: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
60f0: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
6100: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
6110: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
6120: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
6130: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
6140: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
6150: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
6160: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
6170: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
6180: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
6190: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
61a0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
61b0: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
61c0: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
61d0: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
61e0: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
61f0: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
6200: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
6210: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
6220: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
6230: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
6240: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6290: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
62a0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
62b0: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
62c0: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
62d0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
62e0: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
62f0: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
6300: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
6310: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
6320: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
6330: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
6340: 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  m..**.** The P1 
6350: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
6360: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62   actually used b
6370: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
6380: 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69  However, it.** i
6390: 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20  s sometimes set 
63a0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
63b0: 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74  0 as a hint to t
63c0: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
63d0: 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68  shell.** that th
63e0: 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62  is Goto is the b
63f0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6400: 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e  and that the lin
6410: 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a  es from P2 down.
6420: 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ** to the curren
6430: 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65  t line should be
6440: 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58   indented for EX
6450: 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f  PLAIN output..*/
6460: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6480: 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  jump */.jump_to_
6490: 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
64a0: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f  _interrupt:.  pO
64b0: 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
64c0: 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63   - 1];..  /* Opc
64d0: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
64e0: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
64f0: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
6500: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
6510: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f  ** OP_VNext, OP_
6520: 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f  RowSetNext, or O
6530: 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c  P_SorterNext) al
6540: 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e  l jump here upon
6550: 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e  .  ** completion
6560: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
6570: 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  if sqlite3_inter
6580: 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20  rupt() has been 
6590: 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69  called.  ** or i
65a0: 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  f the progress c
65b0: 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f  allback needs to
65c0: 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20   be invoked. .  
65d0: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64  **.  ** This cod
65e0: 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75  e uses unstructu
65f0: 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65  red "goto" state
6600: 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e  ments and does n
6610: 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20  ot look clean.. 
6620: 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20   ** But that is 
6630: 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70  not due to slopp
6640: 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e  y coding habits.
6650: 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69   The code is wri
6660: 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77  tten this.  ** w
6670: 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  ay for performan
6680: 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76  ce, to avoid hav
6690: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69  ing to run the i
66a0: 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f  nterrupt and pro
66b0: 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b  gress.  ** check
66c0: 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64  s on every opcod
66d0: 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73  e.  This helps s
66e0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f  qlite3_step() to
66f0: 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a   run about 1.5%.
6700: 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f    ** faster acco
6710: 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69  rding to "valgri
6720: 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67  nd --tool=cacheg
6730: 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66  rind" */.check_f
6740: 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20  or_interrupt:.  
6750: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
6760: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
6770: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
6780: 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20  errupt;.#ifndef 
6790: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47  SQLITE_OMIT_PROG
67a0: 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20  RESS_CALLBACK.  
67b0: 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67  /* Call the prog
67c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66  ress callback if
67d0: 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65   it is configure
67e0: 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72  d and the requir
67f0: 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f  ed number.  ** o
6800: 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20  f VDBE ops have 
6810: 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65  been executed (e
6820: 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73  ither since this
6830: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20   invocation of. 
6840: 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45   ** sqlite3VdbeE
6850: 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c  xec() or since l
6860: 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f  ast time the pro
6870: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77  gress callback w
6880: 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a  as called)..  **
6890: 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   If the progress
68a0: 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e   callback return
68b0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74  s non-zero, exit
68c0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
68d0: 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61  hine with.  ** a
68e0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c   return code SQL
68f0: 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a  ITE_ABORT..  */.
6900: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
6910: 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65  ess!=0 && nVmSte
6920: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
6930: 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t ){.    assert(
6940: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6950: 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f  s!=0 );.    nPro
6960: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d  gressLimit = nVm
6970: 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67  Step + db->nProg
6980: 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74  ressOps - (nVmSt
6990: 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  ep%db->nProgress
69a0: 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Ops);.    if( db
69b0: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
69c0: 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b  pProgressArg) ){
69d0: 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
69e0: 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20  TE_INTERRUPT;.  
69f0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
6a00: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
6a10: 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
6a20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6a30: 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50  Opcode:  Gosub P
6a40: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
6a50: 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
6a60: 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20  nt address onto 
6a70: 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61  register P1.** a
6a80: 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  nd then jump to 
6a90: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63  address P2..*/.c
6aa0: 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20  ase OP_Gosub: { 
6ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
6ac0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6ad0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
6ae0: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6af0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6b00: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6b10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6b20: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6b30: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6b40: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6b50: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6b60: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6b70: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6b80: 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61 4f  i = (int)(pOp-aO
6b90: 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  p);.  REGISTER_T
6ba0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49  RACE(pOp->p1, pI
6bb0: 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20  n1);..  /* Most 
6bc0: 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73 20  jump operations 
6bd0: 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68 69  do a goto to thi
6be0: 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72 20  s spot in order 
6bf0: 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20 74  to update.  ** t
6c00: 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e 20  he pOp pointer. 
6c10: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20  */.jump_to_p2:. 
6c20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6c30: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65 61  >p2 - 1];.  brea
6c40: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6c50: 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a 20    Return P1 * * 
6c60: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
6c70: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
6c80: 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68 65  uction after the
6c90: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
6ca0: 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72 0a  ster P1.  After.
6cb0: 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  ** the jump, reg
6cc0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6cd0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63   undefined..*/.c
6ce0: 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b  ase OP_Return: {
6cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
6d00: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
6d10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6d20: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6d30: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6d40: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49 6e    pOp = &aOp[pIn
6d50: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d  1->u.i];.  pIn1-
6d60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6d70: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6d80: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
6d90: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  nitCoroutine P1 
6da0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
6db0: 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72 20  Set up register 
6dc0: 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  P1 so that it wi
6dd0: 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65 20  ll Yield to the 
6de0: 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63  coroutine.** loc
6df0: 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73 20  ated at address 
6e00: 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 21  P3..**.** If P2!
6e10: 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72 6f  =0 then the coro
6e20: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6e30: 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79  tion immediately
6e40: 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69 73   follows.** this
6e50: 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75 6d   opcode.  So jum
6e60: 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f 75  p over the corou
6e70: 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tine implementat
6e80: 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65 73  ion to.** addres
6e90: 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  s P2..**.** See 
6ea0: 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74 69  also: EndCorouti
6eb0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  ne.*/.case OP_In
6ec0: 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20  itCoroutine: {  
6ed0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
6ee0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6ef0: 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d 28  0 &&  pOp->p1<=(
6f00: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6f10: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
6f20: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
6f30: 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
6f40: 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
6f50: 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70  Op->p3>=0 && pOp
6f60: 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p3<p->nOp );. 
6f70: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
6f80: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6f90: 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  ( !VdbeMemDynami
6fa0: 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75  c(pOut) );.  pOu
6fb0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33  t->u.i = pOp->p3
6fc0: 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   - 1;.  pOut->fl
6fd0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6fe0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67   if( pOp->p2 ) g
6ff0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
7000: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7010: 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75  pcode:  EndCorou
7020: 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  tine P1 * * * *.
7030: 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75  **.** The instru
7040: 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64  ction at the add
7050: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7060: 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a   P1 is a Yield..
7070: 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50  ** Jump to the P
7080: 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74  2 parameter of t
7090: 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66  hat Yield..** Af
70a0: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
70b0: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
70c0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
70d0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
70e0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
70f0: 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  se OP_EndCorouti
7100: 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ne: {           
7110: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65  /* in1 */.  Vdbe
7120: 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70  Op *pCaller;.  p
7130: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7140: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7150: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
7160: 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
7170: 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26  ( pIn1->u.i>=0 &
7180: 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e  & pIn1->u.i<p->n
7190: 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20  Op );.  pCaller 
71a0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
71b0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61  ];.  assert( pCa
71c0: 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  ller->opcode==OP
71d0: 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65  _Yield );.  asse
71e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e  rt( pCaller->p2>
71f0: 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70  =0 && pCaller->p
7200: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  2<p->nOp );.  pO
7210: 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72  p = &aOp[pCaller
7220: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e  ->p2 - 1];.  pIn
7230: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7240: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7250: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7260: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
7270: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
7280: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
7290: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
72a0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
72b0: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
72c0: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
72d0: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
72e0: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
72f0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
7300: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
7310: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7320: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
7330: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
7340: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
7350: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
7360: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
7370: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
7380: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
7390: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
73a0: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
73b0: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
73c0: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
73d0: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
73e0: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
73f0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
7400: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
7410: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
7420: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
7430: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
7440: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
7450: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
7460: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7470: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
7480: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
7490: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
74a0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
74b0: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
74c0: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
74d0: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
74e0: 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53   - aOp);.  REGIS
74f0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
7500: 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20  1, pIn1);.  pOp 
7510: 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a  = &aOp[pcDest];.
7520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7530: 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75  pcode:  HaltIfNu
7540: 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20  ll  P1 P2 P3 P4 
7550: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
7560: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
7570: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
7580: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
7590: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
75a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
75b0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
75c0: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
75d0: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
75e0: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
75f0: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
7600: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
7610: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
7620: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
7630: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
7640: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
7650: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
7660: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
7670: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
7680: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
7690: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
76a0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
76b0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
76c0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
76d0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
76e0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
76f0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7700: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7710: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7720: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7730: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7740: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
7750: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7760: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7770: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7780: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7790: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
77a0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
77b0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
77c0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
77d0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
77e0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
77f0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7800: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7810: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7820: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7830: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7840: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
7850: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7860: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7870: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7880: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7890: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
78a0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
78b0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
78c0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
78d0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
78e0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
78f0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7900: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7910: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7920: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7930: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7940: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
7950: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7960: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7970: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7980: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7990: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
79a0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
79b0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
79c0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
79d0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
79e0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
79f0: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
7a00: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
7a10: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
7a20: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
7a30: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7a40: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
7a50: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7a60: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
7a70: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
7a80: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7a90: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
7aa0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
7ab0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
7ac0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
7ad0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
7ae0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
7af0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
7b00: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
7b10: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
7b20: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
7b30: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
7b40: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
7b50: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
7b60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7b70: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
7b80: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
7b90: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
7ba0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
7bb0: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
7bc0: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
7bd0: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
7be0: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66  pOp - aOp);.  if
7bf0: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
7c00: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
7c10: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
7c20: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7c30: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
7c40: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
7c50: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72  rame. */.    pFr
7c60: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
7c70: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
7c80: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
7c90: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
7ca0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
7cb0: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
7cc0: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
7cd0: 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56    pcx = sqlite3V
7ce0: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
7cf0: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73  pFrame);.    las
7d00: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
7d10: 74 52 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20  tRowid;.    if( 
7d20: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
7d30: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
7d40: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
7d50: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
7d60: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7d70: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
7d80: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
7d90: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
7da0: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
7db0: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
7dc0: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
7dd0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
7de0: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
7df0: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
7e00: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
7e10: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
7e20: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
7e30: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
7e40: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
7e50: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7e60: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
7e70: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
7e80: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
7e90: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
7ea0: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
7eb0: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
7ec0: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
7ed0: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
7ee0: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
7ef0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
7f00: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
7f10: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
7f20: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
7f30: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73  ->pc = pcx;.  as
7f40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 30  sert( pOp->p5>=0
7f50: 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29   && pOp->p5<=4 )
7f60: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b  ;.  if( p->rc ){
7f70: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  .    if( pOp->p5
7f80: 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63   ){.      static
7f90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
7fa0: 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b  nst azType[] = {
7fb0: 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e   "NOT NULL", "UN
7fc0: 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a  IQUE", "CHECK",.
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f               "FO
8000: 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20  REIGN KEY" };.  
8010: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8020: 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20  p->p5==1 );.    
8030: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8040: 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20  >p5==2 );.      
8050: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
8060: 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65  5==3 );.      te
8070: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
8080: 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =4 );.      sqli
8090: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
80a0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
80b0: 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b 70  ailed", azType[p
80c0: 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20  Op->p5-1]);.    
80d0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20    if( pOp->p4.z 
80e0: 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a 45  ){.        p->zE
80f0: 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d  rrMsg = sqlite3M
8100: 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20  Printf(db, "%z: 
8110: 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c  %s", p->zErrMsg,
8120: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8130: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
8140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8150: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
8160: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8170: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
8180: 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72  g(pOp->p1, "abor
8190: 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a  t at %d in [%s]:
81a0: 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53   %s", pcx, p->zS
81b0: 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
81c0: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
81d0: 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a  te3VdbeHalt(p);.
81e0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
81f0: 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d  LITE_BUSY || rc=
8200: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
8210: 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
8220: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
8230: 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70  TE_BUSY ){.    p
8240: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  ->rc = SQLITE_BU
8250: 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  SY;.  }else{.   
8260: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8270: 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63  ITE_OK || (p->rc
8280: 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43  &0xff)==SQLITE_C
8290: 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20  ONSTRAINT );.   
82a0: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
82b0: 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44  ITE_OK || db->nD
82c0: 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c  eferredCons>0 ||
82d0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
82e0: 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72  mCons>0 );.    r
82f0: 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49  c = p->rc ? SQLI
8300: 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54  TE_ERROR : SQLIT
8310: 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f  E_DONE;.  }.  go
8320: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
8330: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
8340: 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20  teger P1 P2 * * 
8350: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8360: 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68  [P2]=P1.**.** Th
8370: 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
8380: 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72 69   value P1 is wri
8390: 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74  tten into regist
83a0: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
83b0: 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20  P_Integer: {    
83c0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
83d0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
83e0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
83f0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
8400: 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  Op->p1;.  break;
8410: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
8420: 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20 2a  nt64 * P2 * P4 *
8430: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8440: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8450: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8460: 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
8470: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
8480: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
8490: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
84a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20  .case OP_Int64: 
84b0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
84c0: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
84d0: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
84e0: 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
84f0: 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d  ( pOp->p4.pI64!=
8500: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
8510: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34   = *pOp->p4.pI64
8520: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
8530: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8540: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
8550: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c  ./* Opcode: Real
8560: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
8570: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8580: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
8590: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
85a0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
85b0: 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  int value..** Wr
85c0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
85d0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
85e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
85f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8600: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f  * same as TK_FLO
8610: 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f  AT, out2 */.  pO
8620: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8630: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8640: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8650: 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74 28  _Real;.  assert(
8660: 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a   !sqlite3IsNaN(*
8670: 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29  pOp->p4.pReal) )
8680: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20  ;.  pOut->u.r = 
8690: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a  *pOp->p4.pReal;.
86a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
86b0: 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74  f../* Opcode: St
86c0: 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34 20  ring8 * P2 * P4 
86d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
86e0: 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  [P2]='P4'.**.** 
86f0: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e  P4 points to a n
8700: 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55 54  ul terminated UT
8710: 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69 73  F-8 string. This
8720: 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e 73   opcode is trans
8730: 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20  formed .** into 
8740: 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65 20  a String opcode 
8750: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
8760: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
8770: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
8780: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
8790: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
87a0: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
87b0: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
87c0: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
87d0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
87e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
87f0: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
8800: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
8810: 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61  ING, out2 */.  a
8820: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
8830: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
8840: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8850: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f  , pOp);.  pOp->o
8860: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
8870: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
8880: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
8890: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
88a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
88b0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
88c0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
88d0: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
88e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
88f0: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8900: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8910: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8920: 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  IC);.    assert(
8930: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
8940: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  | rc==SQLITE_TOO
8950: 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20 53  BIG );.    if( S
8960: 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65  QLITE_OK!=sqlite
8970: 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
8980: 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
8990: 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ng) ) goto no_me
89a0: 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
89b0: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20  Out->szMalloc>0 
89c0: 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  && pOut->zMalloc
89d0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
89e0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
89f0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
8a00: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a   );.    pOut->sz
8a10: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
8a20: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
8a30: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
8a40: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
8a50: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8a60: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
8a70: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
8a80: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
8a90: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
8aa0: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
8ab0: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
8ac0: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8ad0: 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74  t->n;.  }.  test
8ae0: 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
8af0: 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69  _TOOBIG );.#endi
8b00: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
8b10: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
8b20: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
8b30: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
8b40: 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  big;.  }.  asser
8b50: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8b60: 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68   );.  /* Fall th
8b70: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
8b80: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
8b90: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
8ba0: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
8bb0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
8bc0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
8bd0: 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  4' (len=P1).**.*
8be0: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
8bf0: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
8c00: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
8c10: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
8c20: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
8c30: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
8c40: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
8c50: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65  register P3 is e
8c60: 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e  qual to P5, then
8c70: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
8c80: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
8c90: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
8ca0: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
8cb0: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
8cc0: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
8cd0: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
8ce0: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
8cf0: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
8d00: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
8d10: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
8d20: 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20   been CAST.  In 
8d30: 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a  other words:.**.
8d40: 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64  ** if( P3!=0 and
8d50: 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72   reg[P3]==P5 ) r
8d60: 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72  eg[P2] := CAST(r
8d70: 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a  eg[P2] as BLOB).
8d80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
8d90: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
8da0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
8db0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8dc0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
8dd0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8de0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
8df0: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
8e00: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8e10: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
8e20: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
8e30: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
8e40: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
8e50: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
8e60: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
8e70: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
8e80: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
8e90: 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70  CH_BLOBS.  if( p
8ea0: 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
8eb0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
8ec0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
8ed0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
8ee0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
8ef0: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
8f00: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
8f10: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
8f20: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d   if( pIn3->u.i==
8f30: 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e  pOp->p5 ) pOut->
8f40: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
8f50: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8f60: 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Term;.  }.#endif
8f70: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8f80: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
8f90: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
8fa0: 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33  opsis:  r[P2..P3
8fb0: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=NULL.**.** Wri
8fc0: 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72  te a NULL into r
8fd0: 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66  egisters P2.  If
8fe0: 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e   P3 greater than
8ff0: 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77   P2, then also w
9000: 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74  rite.** NULL int
9010: 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e  o register P3 an
9020: 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72  d every register
9030: 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61   in between P2 a
9040: 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a  nd P3.  If P3.**
9050: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32   is less than P2
9060: 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69   (typically P3 i
9070: 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c  s zero) then onl
9080: 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  y register P2 is
9090: 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e  .** set to NULL.
90a0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
90b0: 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
90c0: 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65  ro, then also se
90d0: 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65  t the MEM_Cleare
90e0: 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a  d flag so that.*
90f0: 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69  * NULL values wi
9100: 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65  ll not compare e
9110: 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c  qual even if SQL
9120: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
9130: 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72  t on.** OP_Ne or
9140: 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20   OP_Eq..*/.case 
9150: 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  OP_Null: {      
9160: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9170: 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36    int cnt;.  u16
9180: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75   nullFlag;.  pOu
9190: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
91a0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e  se(p, pOp);.  cn
91b0: 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d  t = pOp->p3-pOp-
91c0: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
91d0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
91e0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
91f0: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
9200: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70  s = nullFlag = p
9210: 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75  Op->p1 ? (MEM_Nu
9220: 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20  ll|MEM_Cleared) 
9230: 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68  : MEM_Null;.  wh
9240: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
9250: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
9260: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9270: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9280: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9290: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
92a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
92b0: 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b  Flag;.    cnt--;
92c0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
92d0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74  ./* Opcode: Soft
92e0: 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Null P1 * * * *.
92f0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
9300: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9310: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9320: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9330: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9340: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9350: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9360: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9370: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9380: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9390: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
93a0: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
93b0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
93c0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
93d0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
93e0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
93f0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
9400: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9410: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9420: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9430: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9440: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9450: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9460: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
9470: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9480: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9490: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
94a0: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
94b0: 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e  lags|MEM_Null)&~
94c0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
94d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
94e0: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
94f0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9500: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
9510: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
9520: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
9530: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
9540: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
9550: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
9560: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9570: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9590: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
95a0: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
95b0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
95c0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
95d0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
95e0: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
95f0: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
9600: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
9610: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
9620: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9630: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9640: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9650: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9660: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
9670: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9680: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9690: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
96a0: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
96b0: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
96c0: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
96d0: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
96e0: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
96f0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
9700: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
9710: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e  e appears in P4.
9720: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
9730: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
9740: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
9750: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
9760: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
9770: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9780: 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  out2 */.  Mem *p
9790: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
97a0: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
97b0: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
97c0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
97d0: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
97e0: 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
97f0: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
9800: 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56  Op->p4.z==p->azV
9810: 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b  ar[pOp->p1-1] );
9820: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
9830: 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  ar[pOp->p1 - 1];
9840: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
9850: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
9860: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
9870: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_big;.  }.  pOu
9880: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
9890: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71  se(p, pOp);.  sq
98a0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
98b0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
98c0: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
98d0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
98e0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
98f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9900: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
9910: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9920: 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b  is:  r[P2@P3]=r[
9930: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
9940: 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20  e the P3 values 
9950: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
9960: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
9970: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
9980: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
9990: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
99a0: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
99b0: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
99c0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
99d0: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
99e0: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
99f0: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
9a00: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49  1 to overlap.  I
9a10: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a  t is an error.**
9a20: 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65   for P3 to be le
9a30: 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61  ss than 1..*/.ca
9a40: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
9a50: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
9a60: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
9a70: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
9a80: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
9a90: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9aa0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
9ab0: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
9ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9ad0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
9ae0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
9af0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
9b00: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
9b10: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
9b20: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
9b30: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
9b40: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
9b50: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
9b60: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
9b70: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
9b80: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
9b90: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
9ba0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9bb0: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
9bc0: 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d  ssert( pIn1<=&aM
9bd0: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
9be0: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9bf0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
9c00: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
9c10: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
9c20: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
9c30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
9c40: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
9c50: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
9c60: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
9c70: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
9c80: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
9c90: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70  ut->pScopyFrom<p
9ca0: 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Out ){.      pOu
9cb0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
9cc0: 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20   pOp->p2 - p1;. 
9cd0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
9ce0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9cf0: 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Out);.    REGIST
9d00: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
9d10: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
9d20: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
9d30: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20  }while( --n );. 
9d40: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9d50: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
9d60: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9d70: 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d  sis: r[P2@P3+1]=
9d80: 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a  r[P1@P3+1].**.**
9d90: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
9da0: 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  registers P1..P1
9db0: 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65  +P3 into registe
9dc0: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a  rs P2..P2+P3..**
9dd0: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
9de0: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
9df0: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
9e00: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
9e10: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
9e20: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
9e30: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
9e40: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
9e50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
9e60: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  : {.  int n;..  
9e70: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
9e80: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9e90: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9ea0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9eb0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9ec0: 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  In1 );.  while( 
9ed0: 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
9ee0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9ef0: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9f00: 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44  EM_Ephem);.    D
9f10: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9f20: 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ut);.#ifdef SQLI
9f30: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75  TE_DEBUG.    pOu
9f40: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20  t->pScopyFrom = 
9f50: 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45  0;.#endif.    RE
9f60: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
9f70: 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20  ->p2+pOp->p3-n, 
9f80: 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28  pOut);.    if( (
9f90: 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  n--)==0 ) break;
9fa0: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20  .    pOut++;.   
9fb0: 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
9fc0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9fd0: 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20  de: SCopy P1 P2 
9fe0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9ff0: 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a  s: r[P2]=r[P1].*
a000: 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c  *.** Make a shal
a010: 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69  low copy of regi
a020: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
a030: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
a040: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
a050: 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77   makes a shallow
a060: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
a070: 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ue.  If the valu
a080: 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67  e.** is a string
a090: 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74   or blob, then t
a0a0: 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20  he copy is only 
a0b0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
a0c0: 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64  .** original and
a0d0: 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72   hence if the or
a0e0: 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73  iginal changes s
a0f0: 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e  o will the copy.
a100: 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68  .** Worse, if th
a110: 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65  e original is de
a120: 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63  allocated, the c
a130: 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61  opy becomes inva
a140: 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65  lid..** Thus the
a150: 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75   program must gu
a160: 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65  arantee that the
a170: 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e   original will n
a180: 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72  ot change.** dur
a190: 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65  ing the lifetime
a1a0: 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55   of the copy.  U
a1b0: 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61  se OP_Copy to ma
a1c0: 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a  ke a complete.**
a1d0: 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f   copy..*/.case O
a1e0: 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  P_SCopy: {      
a1f0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a200: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a210: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
a220: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a230: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75  ];.  assert( pOu
a240: 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c  t!=pIn1 );.  sql
a250: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
a260: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
a270: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23  1, MEM_Ephem);.#
a280: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
a290: 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  UG.  if( pOut->p
a2a0: 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70  ScopyFrom==0 ) p
a2b0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
a2c0: 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20  = pIn1;.#endif. 
a2d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a2e0: 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31  code: IntCopy P1
a2f0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a300: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
a310: 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  1].**.** Transfe
a320: 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  r the integer va
a330: 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69  lue held in regi
a340: 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  ster P1 into reg
a350: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
a360: 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d  This is an optim
a370: 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  ized version of 
a380: 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73  SCopy that works
a390: 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65   only for intege
a3a0: 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a  r.** values..*/.
a3b0: 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a  case OP_IntCopy:
a3c0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
a3d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
a3e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a3f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
a400: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
a410: 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  nt)!=0 );.  pOut
a420: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a430: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
a440: 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
a450: 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn1->u.i);.  
a460: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a470: 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50  ode: ResultRow P
a480: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
a490: 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74 3d  nopsis:  output=
a4a0: 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  r[P1@P2].**.** T
a4b0: 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20  he registers P1 
a4c0: 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20  through P1+P2-1 
a4d0: 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65  contain a single
a4e0: 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c   row of.** resul
a4f0: 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ts. This opcode 
a500: 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74  causes the sqlit
a510: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74  e3_step() call t
a520: 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77  o terminate.** w
a530: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f  ith an SQLITE_RO
a540: 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  W return code an
a550: 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65  d it sets up the
a560: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a   sqlite3_stmt.**
a570: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72   structure to pr
a580: 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20  ovide access to 
a590: 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b  the r(P1)..r(P1+
a5a0: 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a  P2-1) values as.
a5b0: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  ** the result ro
a5c0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
a5d0: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
a5e0: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
a5f0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
a600: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
a610: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
a620: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
a630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
a640: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
a650: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
a660: 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  1 );..#ifndef SQ
a670: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
a680: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
a690: 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73   Run the progres
a6a0: 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62  s counter just b
a6b0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
a6c0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
a6d0: 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20  xProgress!=0.   
a6e0: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
a6f0: 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26  gressLimit.   &&
a700: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
a710: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
a720: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20  !=0.  ){.    rc 
a730: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
a740: 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  PT;.    goto abo
a750: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
a760: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
a770: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
a780: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
a790: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
a7a0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
a7b0: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
a7c0: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a7d0: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
a7e0: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
a7f0: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
a800: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
a810: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
a820: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
a830: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
a840: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
a850: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
a860: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
a870: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
a880: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
a890: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
a8a0: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
a8b0: 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  nal );.    goto 
a8c0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
a8d0: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  or;.  }..  /* If
a8e0: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
a8f0: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
a900: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
a910: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
a920: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
a930: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
a940: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
a950: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
a960: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
a970: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
a980: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
a990: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
a9a0: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
a9b0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a9c0: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
a9d0: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
a9e0: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
a9f0: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
aa00: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
aa10: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
aa20: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
aa30: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
aa40: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
aa50: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
aa60: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
aa70: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
aa80: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
aa90: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
aaa0: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
aab0: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
aac0: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
aad0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
aae0: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
aaf0: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
ab00: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
ab10: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
ab20: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
ab30: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
ab40: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
ab50: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
ab60: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
ab70: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
ab80: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
ab90: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
aba0: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
abb0: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
abc0: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
abd0: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
abe0: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
abf0: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
ac00: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
ac10: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
ac20: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
ac30: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
ac40: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
ac50: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
ac60: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
ac70: 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ASE);.  assert( 
ac80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
ac90: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
aca0: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
acb0: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
acc0: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
acd0: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
ace0: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
acf0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
ad00: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
ad10: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
ad20: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
ad30: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
ad40: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
ad50: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
ad60: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
ad70: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
ad80: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
ad90: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
ada0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
adb0: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
adc0: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
add0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
ade0: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
adf0: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
ae00: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
ae10: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
ae20: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
ae30: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
ae40: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
ae50: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
ae60: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
ae70: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
ae80: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
ae90: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
aea0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
aeb0: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
aec0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
aed0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
aee0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
aef0: 65 6d 3b 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e  em;..  /* Return
af00: 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f   SQLITE_ROW.  */
af10: 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29  .  p->pc = (int)
af20: 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b  (pOp - aOp) + 1;
af30: 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52  .  rc = SQLITE_R
af40: 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f  OW;.  goto vdbe_
af50: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
af60: 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20  code: Concat P1 
af70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
af80: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
af90: 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41  2]+r[P1].**.** A
afa0: 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72  dd the text in r
afb0: 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20  egister P1 onto 
afc0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74  the end of the t
afd0: 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ext in.** regist
afe0: 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20  er P2 and store 
aff0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b000: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b010: 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f   either the P1 o
b020: 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55  r P2 text are NU
b030: 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55  LL then store NU
b040: 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  LL in P3..**.** 
b050: 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a    P3 = P2 || P1.
b060: 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
b070: 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50  gal for P1 and P
b080: 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65  3 to be the same
b090: 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74   register. Somet
b0a0: 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69  imes,.** if P3 i
b0b0: 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  s the same regis
b0c0: 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69  ter as P2, the i
b0d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73  mplementation is
b0e0: 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   able.** to avoi
b0f0: 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f  d a memcpy()..*/
b100: 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a  .case OP_Concat:
b110: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b120: 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41  same as TK_CONCA
b130: 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  T, in1, in2, out
b140: 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  3 */.  i64 nByte
b150: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
b160: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
b170: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
b180: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
b190: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b1a0: 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f  assert( pIn1!=pO
b1b0: 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  ut );.  if( (pIn
b1c0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
b1d0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
b1e0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
b1f0: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
b200: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
b210: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61  ;.  }.  if( Expa
b220: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20  ndBlob(pIn1) || 
b230: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
b240: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
b250: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31    Stringify(pIn1
b260: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53  , encoding);.  S
b270: 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65  tringify(pIn2, e
b280: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74  ncoding);.  nByt
b290: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
b2a0: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
b2b0: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
b2c0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
b2d0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
b2e0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
b2f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
b300: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
b310: 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70  nByte+2, pOut==p
b320: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
b330: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
b340: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b350: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
b360: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
b370: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
b380: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
b390: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d  In2->n);.  }.  m
b3a0: 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70  emcpy(&pOut->z[p
b3b0: 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a  In2->n], pIn1->z
b3c0: 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f  , pIn1->n);.  pO
b3d0: 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a  ut->z[nByte]=0;.
b3e0: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b    pOut->z[nByte+
b3f0: 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e  1] = 0;.  pOut->
b400: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72  flags |= MEM_Ter
b410: 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  m;.  pOut->n = (
b420: 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
b430: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
b440: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
b450: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
b460: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b470: 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32  pcode: Add P1 P2
b480: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b490: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
b4a0: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
b4b0: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
b4c0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
b4d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b4e0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b4f0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b500: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b510: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b520: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b530: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b540: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
b550: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
b560: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b570: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
b580: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
b590: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
b5a0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
b5b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b5c0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b5d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b5e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b5f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b600: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b610: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b620: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b630: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
b640: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b650: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  s:  r[P3]=r[P2]-
b660: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
b670: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
b680: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
b690: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om 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 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b6e0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b6f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b700: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b710: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
b720: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b730: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  s:  r[P3]=r[P2]/
b740: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b750: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b760: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b770: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b780: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b790: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b7a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b7b0: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b7c0: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b7d0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b7e0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b7f0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b800: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b810: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b820: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b830: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b840: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b850: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b860: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b870: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b880: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b890: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b8a0: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b8b0: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b8c0: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b8d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b8e0: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b8f0: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b900: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b910: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b920: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b930: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b940: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b950: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b960: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b980: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b990: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b9a0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b9b0: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b9c0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b9d0: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b9e0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b9f0: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
ba00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ba10: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
ba20: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ba30: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ba50: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
ba60: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
ba70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
ba80: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
ba90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
baa0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
bab0: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
bac0: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
bad0: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
bae0: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
baf0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
bb00: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
bb10: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
bb20: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
bb30: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
bb40: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
bb50: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
bb60: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
bb70: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
bb80: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
bb90: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bba0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
bbb0: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bbc0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bbd0: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
bbe0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bbf0: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
bc00: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bc10: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
bc20: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
bc30: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bc40: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
bc50: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
bc60: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
bc70: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
bc80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
bc90: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
bca0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
bcb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bcc0: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
bcd0: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
bce0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bcf0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
bd00: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bd10: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
bd20: 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75   (flags & MEM_Nu
bd30: 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72  ll)!=0 ) goto ar
bd40: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
bd50: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28  is_null;.  if( (
bd60: 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20  type1 & type2 & 
bd70: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
bd80: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
bd90: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
bda0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
bdb0: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
bdc0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
bdd0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
bde0: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
bdf0: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
be00: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
be10: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
be20: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
be30: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
be40: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
be50: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
be60: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
be70: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
be80: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
be90: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
bea0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
beb0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bec0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
bed0: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
bee0: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
bef0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
bf00: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
bf10: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
bf20: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
bf30: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
bf40: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
bf50: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
bf60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
bf70: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
bf80: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
bf90: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
bfa0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
bfb0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
bfc0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
bfd0: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
bfe0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bff0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
c000: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
c010: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c020: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c030: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
c040: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
c050: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
c060: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
c070: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
c080: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
c090: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
c0a0: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
c0b0: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
c0c0: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
c0d0: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
c0e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c0f0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
c100: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
c110: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c120: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
c130: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
c140: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c150: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
c160: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
c170: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
c180: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
c190: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
c1a0: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
c1b0: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
c1c0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
c1d0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c1e0: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
c1f0: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
c200: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c210: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
c220: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
c230: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
c240: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
c250: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
c260: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c270: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c280: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
c290: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
c2a0: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
c2b0: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
c2c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c2d0: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
c2e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
c2f0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
c300: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
c310: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c320: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
c330: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
c340: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
c350: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
c360: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c370: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
c380: 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42    pOut->u.r = rB
c390: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c3a0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52  Flag(pOut, MEM_R
c3b0: 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28  eal);.    if( ((
c3c0: 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d  type1|type2)&MEM
c3d0: 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49  _Real)==0 && !bI
c3e0: 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  ntint ){.      s
c3f0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
c400: 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b  rAffinity(pOut);
c410: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
c420: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74  }.  break;..arit
c430: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c440: 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33  _null:.  sqlite3
c450: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c460: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
c470: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c  ../* Opcode: Col
c480: 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a  lSeq P1 * * P4.*
c490: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
c4a0: 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65  nter to a CollSe
c4b0: 71 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65  q struct. If the
c4c0: 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20   next call to a 
c4d0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
c4e0: 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61   or aggregate ca
c4f0: 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75  lls sqlite3GetFu
c500: 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69  ncCollSeq(), thi
c510: 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  s collation sequ
c520: 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20  ence will.** be 
c530: 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69  returned. This i
c540: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75  s used by the bu
c550: 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61  ilt-in min(), ma
c560: 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29  x() and nullif()
c570: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  .** functions..*
c580: 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
c590: 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20  t zero, then it 
c5a0: 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68  is a register th
c5b0: 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  at a subsequent 
c5c0: 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28  min() or.** max(
c5d0: 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c  ) aggregate will
c5e0: 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65   set to 1 if the
c5f0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20   current row is 
c600: 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  not the minimum 
c610: 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20  or.** maximum.  
c620: 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20  The P1 register 
c630: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  is initialized t
c640: 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74  o 0 by this inst
c650: 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
c660: 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65  he interface use
c670: 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65  d by the impleme
c680: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61  ntation of the a
c690: 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75  forementioned fu
c6a0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65  nctions.** to re
c6b0: 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61  trieve the colla
c6c0: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65  tion sequence se
c6d0: 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  t by this opcode
c6e0: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
c6f0: 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20  e.** publicly.  
c700: 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75  Only built-in fu
c710: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63  nctions have acc
c720: 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74  ess to this feat
c730: 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
c740: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
c750: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
c760: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
c770: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
c780: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c790: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
c7a0: 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a  m[pOp->p1], 0);.
c7b0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
c7c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
c7d0: 69 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34  ion0 P1 P2 P3 P4
c7e0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
c7f0: 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32   r[P3]=func(r[P2
c800: 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  @P5]).**.** Invo
c810: 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  ke a user functi
c820: 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e  on (P4 is a poin
c830: 74 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66  ter to a FuncDef
c840: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
c850: 64 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63  defines the func
c860: 74 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72  tion) with P5 ar
c870: 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72  guments taken fr
c880: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
c890: 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  nd.** successors
c8a0: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66  .  The result of
c8b0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
c8c0: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
c8d0: 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73  ter P3..** Regis
c8e0: 74 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20  ter P3 must not 
c8f0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75  be one of the fu
c900: 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a  nction inputs..*
c910: 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d  *.** P1 is a 32-
c920: 62 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69  bit bitmask indi
c930: 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  cating whether o
c940: 72 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d  r not each argum
c950: 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66  ent to the .** f
c960: 75 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65  unction was dete
c970: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e  rmined to be con
c980: 73 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65  stant at compile
c990: 20 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69   time. If the fi
c9a0: 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
c9b0: 77 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65  was constant the
c9c0: 6e 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73  n bit 0 of P1 is
c9d0: 20 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73   set. This is us
c9e0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a  ed to determine.
c9f0: 2a 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20  ** whether meta 
ca00: 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20  data associated 
ca10: 77 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63  with a user func
ca20: 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73  tion argument us
ca30: 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74  ing the.** sqlit
ca40: 65 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29  e3_set_auxdata()
ca50: 20 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65   API may be safe
ca60: 6c 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69  ly retained unti
ca70: 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  l the next.** in
ca80: 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73  vocation of this
ca90: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
caa0: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
cab0: 6e 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46  n, AggStep, AggF
cac0: 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  inal.*/./* Opcod
cad0: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
cae0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
caf0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
cb00: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
cb10: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
cb20: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
cb30: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
cb40: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
cb50: 20 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20   object that.** 
cb60: 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74  contains a point
cb70: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  er to the functi
cb80: 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69  on to be run) wi
cb90: 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  th P5 arguments 
cba0: 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65  taken.** from re
cbb0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75  gister P2 and su
cbc0: 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72  ccessors.  The r
cbd0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
cbe0: 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a  ction is stored.
cbf0: 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
cc00: 33 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  3.  Register P3 
cc10: 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20  must not be one 
cc20: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
cc30: 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31  inputs..**.** P1
cc40: 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74   is a 32-bit bit
cc50: 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20  mask indicating 
cc60: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65  whether or not e
cc70: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ach argument to 
cc80: 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  the .** function
cc90: 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20   was determined 
cca0: 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61  to be constant a
ccb0: 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20  t compile time. 
ccc0: 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  If the first.** 
ccd0: 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e  argument was con
cce0: 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30  stant then bit 0
ccf0: 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54   of P1 is set. T
cd00: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64  his is used to d
cd10: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
cd20: 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73  her meta data as
cd30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
cd40: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72  user function ar
cd50: 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  gument using the
cd60: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f  .** sqlite3_set_
cd70: 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61  auxdata() API ma
cd80: 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61  y be safely reta
cd90: 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  ined until the n
cda0: 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  ext.** invocatio
cdb0: 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  n of this opcode
cdc0: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63  ..**.** SQL func
cdd0: 74 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61  tions are initia
cde0: 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
cdf0: 46 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50  Function0 with P
ce00: 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f  4 pointing.** to
ce10: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
ce20: 74 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74  t.  But on first
ce30: 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65   evaluation, the
ce40: 20 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a   P4 operand is.*
ce50: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
ce60: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
ce70: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n sqlite3_contex
ce80: 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  t object and the
ce90: 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68   operation.** ch
cea0: 61 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50  anged to this OP
ceb0: 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65  _Function opcode
cec0: 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
ced0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
cee0: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c  on of.** the sql
cef0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cf00: 65 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20  ect occurs only 
cf10: 6f 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61  once, rather tha
cf20: 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a  n once for each.
cf30: 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66  ** evaluation of
cf40: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
cf50: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
cf60: 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65  unction0, AggSte
cf70: 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63  p, AggFinal.*/.c
cf80: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30  ase OP_Function0
cf90: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
cfa0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
cfb0: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cfc0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
cfd0: 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
cfe0: 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
cff0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
d000: 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
d010: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
d020: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
d030: 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
d040: 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
d050: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
d060: 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
d070: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d080: 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
d090: 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
d0a0: 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
d0b0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
d0c0: 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  N(db, sizeof(*pC
d0d0: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
d0e0: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
d0f0: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
d100: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
d110: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
d120: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
d130: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
d140: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
d150: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
d160: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
d170: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
d180: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
d190: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
d1a0: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
d1b0: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
d1c0: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
d1d0: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
d1e0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
d1f0: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
d200: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
d210: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
d220: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
d230: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
d240: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
d250: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
d260: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
d270: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
d280: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
d290: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
d2a0: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
d2b0: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
d2c0: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
d2d0: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
d2e0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
d2f0: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
d300: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
d310: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
d320: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
d330: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
d340: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
d350: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
d360: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
d370: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
d380: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
d390: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
d3a0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d3b0: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
d3c0: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
d3d0: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
d3e0: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
d3f0: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
d400: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
d410: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d420: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
d430: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d440: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
d450: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
d460: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
d470: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
d480: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
d490: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
d4a0: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
d4b0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d4c0: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
d4d0: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
d4e0: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
d4f0: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
d500: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
d510: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
d520: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
d530: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
d540: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
d550: 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70  >xSFunc)(pCtx, p
d560: 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d  Ctx->argc, pCtx-
d570: 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52  >argv);/* IMP: R
d580: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
d590: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
d5a0: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
d5b0: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
d5c0: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
d5d0: 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20  xSFunc */..  /* 
d5e0: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
d5f0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
d600: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
d610: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70  ption */.  if( p
d620: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d630: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
d640: 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
d650: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
d660: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
d670: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d680: 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
d690: 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
d6a0: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
d6b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
d6c0: 65 74 65 41 75 78 44 61 74 61 28 64 62 2c 20 26  eteAuxData(db, &
d6d0: 70 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74  p->pAuxData, pCt
d6e0: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d6f0: 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
d700: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
d710: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
d720: 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
d730: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
d740: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
d750: 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74  P3 */.  if( pOut
d760: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
d770: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
d780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
d790: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43  hangeEncoding(pC
d7a0: 74 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69  tx->pOut, encodi
d7b0: 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  ng);.    if( sql
d7c0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
d7d0: 67 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20  g(pCtx->pOut) ) 
d7e0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
d7f0: 7d 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  }..  REGISTER_TR
d800: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74  ACE(pOp->p3, pCt
d810: 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  x->pOut);.  UPDA
d820: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
d830: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62  pCtx->pOut);.  b
d840: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
d850: 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32  de: BitAnd P1 P2
d860: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d870: 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31  sis:  r[P3]=r[P1
d880: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
d890: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d8a0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
d8b0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
d8c0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
d8d0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d8f0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d900: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d910: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d920: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
d930: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
d940: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d950: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d960: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d970: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d980: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d990: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d9a0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d9b0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d9c0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d9d0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d9e0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d9f0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
da00: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
da10: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
da20: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
da30: 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a  =r[P2]<<r[P1].**
da40: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
da50: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
da60: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
da70: 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a  e left by the.**
da80: 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
da90: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
daa0: 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69   integer in regi
dab0: 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72  ster P1..** Stor
dac0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
dad0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
dae0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
daf0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
db00: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
db10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74  /* Opcode: Shift
db20: 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a  Right P1 P2 P3 *
db30: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
db40: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
db50: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
db60: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
db70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
db80: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
db90: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
dba0: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
dbb0: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
dbc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
dbd0: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
dbe0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
dbf0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
dc00: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
dc10: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
dc20: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
dc30: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
dc40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dc50: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
dc60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
dc70: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dc90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
dca0: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
dcb0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
dcc0: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
dcd0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dce0: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
dcf0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
dd00: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
dd10: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
dd20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
dd30: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
dd40: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
dd50: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
dd60: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
dd70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
dd80: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
dd90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
dda0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
ddb0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
ddc0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
ddd0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
dde0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
ddf0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
de00: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
de10: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
de20: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
de30: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
de40: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
de50: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
de60: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
de70: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
de80: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
de90: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
dea0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
deb0: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
dec0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
ded0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
dee0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
def0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
df00: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
df10: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
df20: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
df30: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
df40: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
df50: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
df60: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
df70: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
df80: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
df90: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
dfa0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
dfb0: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
dfc0: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
dfd0: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
dfe0: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
dff0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
e000: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
e010: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
e020: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
e030: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
e040: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
e050: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
e060: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
e070: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
e080: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e090: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
e0a0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
e0b0: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
e0c0: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
e0d0: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
e0e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
e0f0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
e100: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
e110: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
e120: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
e130: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
e140: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
e150: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
e160: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
e170: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
e180: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e190: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
e1a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
e1b0: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
e1c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
e1d0: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
e1e0: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
e1f0: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
e200: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e210: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e220: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e230: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e240: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e250: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e260: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e270: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e280: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e290: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e2a0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e2b0: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e2c0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e2d0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e2e0: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e2f0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e300: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e310: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e320: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e330: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e340: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e350: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e360: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e370: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e380: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e390: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e3a0: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e3b0: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e3c0: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e3d0: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e3e0: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e3f0: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e400: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e410: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e420: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e430: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e440: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e450: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e460: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e470: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e480: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e490: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e4a0: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e4b0: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e4c0: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e4d0: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e4e0: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e4f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e500: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e510: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e520: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e530: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e540: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e550: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e560: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e570: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e580: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e590: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e5a0: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e5b0: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e5c0: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e5d0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e5e0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e5f0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e600: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e610: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e620: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e630: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e640: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e650: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e660: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e670: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e680: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e690: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e6a0: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e6b0: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e6c0: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e6d0: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e6e0: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e6f0: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e700: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e710: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e720: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e730: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e740: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e750: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e760: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e770: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e780: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e790: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e7a0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e7b0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e7c0: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e7d0: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e7e0: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e7f0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e800: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e810: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e820: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e830: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e840: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e850: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e860: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e870: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e880: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e890: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e8a0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e8b0: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e8c0: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e8d0: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e8e0: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e8f0: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e900: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e910: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e920: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e930: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e940: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e950: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e960: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e970: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e990: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
e9a0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
e9b0: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
e9c0: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
e9d0: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
e9e0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e9f0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
ea00: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
ea10: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ea20: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
ea30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ea40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
ea50: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
ea60: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
ea70: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
ea80: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
ea90: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eaa0: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
eab0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
eac0: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
ead0: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
eae0: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
eaf0: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
eb00: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
eb10: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
eb20: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
eb30: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
eb40: 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In1);.  if( rc )
eb50: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
eb60: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
eb70: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
eb80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
eb90: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  */../* Opcode: L
eba0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
ebb0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ebc0: 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74   r[P1]<r[P3] got
ebd0: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  o P2.**.** Compa
ebe0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
ebf0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
ec00: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
ec10: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
ec20: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
ec30: 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20   P2.  .**.** If 
ec40: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
ec50: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
ec60: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
ec70: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
ec80: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
ec90: 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
eca0: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
ecb0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
ecc0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
ecd0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
ece0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
ecf0: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
ed00: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
ed10: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
ed20: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
ed30: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
ed40: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
ed50: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
ed60: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
ed70: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
ed80: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
ed90: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
eda0: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
edb0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
edc0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
edd0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
ede0: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
edf0: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
ee00: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
ee10: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
ee20: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
ee30: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
ee40: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
ee50: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
ee60: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
ee70: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
ee80: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
ee90: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
eea0: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
eeb0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
eec0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
eed0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
eee0: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
eef0: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
ef00: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
ef10: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
ef20: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
ef30: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
ef40: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
ef50: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
ef60: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
ef70: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
ef80: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
ef90: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
efa0: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
efb0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
efc0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
efd0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
efe0: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
eff0: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
f000: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
f010: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f020: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f030: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f040: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f050: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f060: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f070: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f080: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f090: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f0a0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f0b0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f0c0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f0d0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f0e0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f0f0: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f100: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f110: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
f120: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
f130: 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73  EP2 bit of P5 is
f140: 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f   set, then do no
f150: 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64  t jump.  Instead
f160: 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f  ,.** store a boo
f170: 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74  lean result (eit
f180: 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20  her 0, or 1, or 
f190: 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65  NULL) in registe
f1a0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
f1b0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
f1c0: 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50   bit is set in P
f1d0: 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c  5, then NULL val
f1e0: 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ues are consider
f1f0: 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f  ed.** equal to o
f200: 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76  ne another, prov
f210: 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64  ided that they d
f220: 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72  o not have their
f230: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20   MEM_Cleared.** 
f240: 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f  bit set..*/./* O
f250: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
f260: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f270: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
f280: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
f290: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f2a0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f2b0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f2c0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f2d0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
f2e0: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
f2f0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
f300: 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53  re not equal.  S
f310: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f320: 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e   for.** addition
f330: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f340: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
f350: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
f360: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
f370: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f380: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
f390: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
f3a0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
f3b0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
f3c0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f3d0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f3e0: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
f3f0: 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66  on is false.  If
f400: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f410: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
f420: 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e   result is true.
f430: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f440: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f450: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f460: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f470: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f480: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f490: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f4a0: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
f4b0: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
f4c0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f4d0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72  sis: if r[P1]==r
f4e0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f4f0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f500: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f510: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f520: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f530: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
f540: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
f550: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
f560: 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20  e equal..** See 
f570: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
f580: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
f590: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
f5a0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f5b0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68   is set in P5 th
f5c0: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
f5d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
f5e0: 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20  lways either.** 
f5f0: 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e  true or false an
f600: 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e  d is never NULL.
f610: 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e    If both operan
f620: 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e  ds are NULL then
f630: 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f   the result.** o
f640: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
f650: 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72  true.  If either
f660: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f670: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
f680: 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66   is false..** If
f690: 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   neither operand
f6a0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73   is NULL the res
f6b0: 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20  ult is the same 
f6c0: 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69  as it would be i
f6d0: 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  f.** the SQLITE_
f6e0: 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65  NULLEQ flag were
f6f0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35   omitted from P5
f700: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f710: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
f720: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
f730: 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67  f r[P1]<=r[P3] g
f740: 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
f750: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f760: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f770: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f780: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f790: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f7a0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f7b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
f7c0: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f7d0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f7e0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f7f0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f800: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f810: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f820: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
f830: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f840: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33  s: if r[P1]>r[P3
f850: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f860: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f870: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f880: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f890: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f8a0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f8b0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f8c0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
f8d0: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
f8e0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
f8f0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
f900: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f910: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f920: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
f930: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f940: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
f950: 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]>=r[P3] got
f960: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
f970: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f980: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f990: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f9a0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f9b0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f9c0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f9d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f9e0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f9f0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
fa00: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
fa10: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
fa20: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
fa30: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
fa40: 50 5f 43 6d 70 3a 20 20 20 20 20 20 20 20 20 20  P_Cmp:          
fa50: 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 33 20      /* in1, in3 
fa60: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20  */.case OP_Eq:  
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fa80: 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a  same as TK_EQ, j
fa90: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
faa0: 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20  .case OP_Ne:    
fab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fac0: 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d  me as TK_NE, jum
fad0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
fae0: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20  ase OP_Lt:      
faf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fb00: 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c   as TK_LT, jump,
fb10: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
fb20: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20  e OP_Le:        
fb30: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fb40: 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69  s TK_LE, jump, i
fb50: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
fb60: 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Gt:          
fb70: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fb80: 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GT, jump, in1
fb90: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
fba0: 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Ge: {          
fbb0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
fbc0: 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GE, jump, in1, 
fbd0: 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
fbe0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
fbf0: 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f  Result of the co
fc00: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31  mparison of pIn1
fc10: 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f   against pIn3 */
fc20: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
fc30: 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
fc40: 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f  ty to use for co
fc50: 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31  mparison */.  u1
fc60: 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20  6 flags1;       
fc70: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
fc80: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
fc90: 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75  n1->flags */.  u
fca0: 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20  16 flags3;      
fcb0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
fcc0: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
fcd0: 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20  In3->flags */.. 
fce0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
fcf0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
fd00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
fd10: 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31  .  flags1 = pIn1
fd20: 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73  ->flags;.  flags
fd30: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
fd40: 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c  .  if( (flags1 |
fd50: 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c   flags3)&MEM_Nul
fd60: 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20  l ){.    /* One 
fd70: 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  or both operands
fd80: 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   are NULL */.   
fd90: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
fda0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a  QLITE_NULLEQ ){.
fdb0: 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49        /* If SQLI
fdc0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
fdd0: 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c   (which will onl
fde0: 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20  y happen if the 
fdf0: 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20  operator is.    
fe00: 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50    ** OP_Eq or OP
fe10: 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74  _Ne) then take t
fe20: 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64  he jump or not d
fe30: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
fe40: 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20  her.      ** or 
fe50: 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64  not both operand
fe60: 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20  s are null..    
fe70: 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
fe80: 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
fe90: 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70  OP_Eq || pOp->op
fea0: 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20  code==OP_Ne );. 
feb0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c       assert( (fl
fec0: 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72  ags1 & MEM_Clear
fed0: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ed)==0 );.      
fee0: 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
fef0: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
ff00: 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20  NULL)==0 );.    
ff10: 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45    if( (flags1&ME
ff20: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
ff30: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
ff40: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
ff50: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
ff60: 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20  Cleared)==0.    
ff70: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73    ){.        res
ff80: 20 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74   = 0;  /* Result
ff90: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
ffa0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
ffb0: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
ffc0: 20 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74   Results are not
ffd0: 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
ffe0: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
fff0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
10000 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
10010 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
10020 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
10030 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
10040 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
10050 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
10060 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
10070 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
10080 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
10090 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
100a0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
100b0 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
100c0 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  EP2 ){.        p
100d0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
100e0 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p2];.        me
100f0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
10100 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20  , pOut);.       
10110 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10120 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
10130 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
10140 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
10150 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
10160 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62  lse{.        Vdb
10170 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
10180 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
10190 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
101a0 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
101b0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
101c0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
101d0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
101e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
101f0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
10200 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
10210 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
10220 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
10230 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
10240 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
10250 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
10260 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
10270 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
10280 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10290 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74  | flags3)&MEM_St
102a0 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  r ){.        if(
102b0 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
102c0 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
102d0 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
102e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  ){.          app
102f0 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
10300 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20  y(pIn1,0);.     
10310 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49       flags3 = pI
10320 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20  n3->flags;.     
10330 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
10340 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
10350 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
10360 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
10370 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  ){.          app
10380 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
10390 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20  y(pIn3,0);.     
103a0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
103b0 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
103c0 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
103d0 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
103e0 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
103f0 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10400 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
10410 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
10420 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10430 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10440 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
10450 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
10460 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
10470 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
10480 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
10490 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
104a0 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
104b0 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
104c0 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
104d0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
104e0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
104f0 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
10500 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10510 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10520 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
10530 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73  );.        flags
10540 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
10550 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
10560 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
10570 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
10580 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
10590 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
105a0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
105b0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
105c0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
105d0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
105e0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
105f0 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
10600 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
10610 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
10620 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
10630 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
10640 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
10650 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
10660 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
10670 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
10680 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
10690 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
106a0 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
106b0 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
106c0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
106d0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
106e0 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
106f0 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
10700 20 69 66 28 20 66 6c 61 67 73 31 20 26 20 4d 45   if( flags1 & ME
10710 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
10720 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
10730 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
10740 20 20 20 20 20 20 66 6c 61 67 73 31 20 26 3d 20        flags1 &= 
10750 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d  ~MEM_Zero;.    }
10760 0a 20 20 20 20 69 66 28 20 66 6c 61 67 73 33 20  .    if( flags3 
10770 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
10780 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10790 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
107a0 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33  3);.      flags3
107b0 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20   &= ~MEM_Zero;. 
107c0 20 20 20 7d 0a 20 20 20 20 72 65 73 20 3d 20 73     }.    res = s
107d0 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
107e0 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
107f0 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d  ->p4.pColl);.  }
10800 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
10810 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
10820 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
10830 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
10840 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
10850 50 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ne:    res = r
10860 65 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es!=0;     break
10870 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74  ;.    case OP_Lt
10880 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30  :    res = res<0
10890 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
108a0 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
108b0 20 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20   res = res<=0;  
108c0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
108d0 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73  se OP_Gt:    res
108e0 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62   = res>0;      b
108f0 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
10900 50 5f 47 65 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Ge:    res = r
10910 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
10920 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 61  ;.    default: a
10930 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
10940 64 65 3d 3d 4f 50 5f 43 6d 70 20 29 3b 20 62 72  de==OP_Cmp ); br
10950 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  eak;.  }..  /* U
10960 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
10970 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
10980 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
10990 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
109a0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
109b0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
109c0 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
109d0 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
109e0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
109f0 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10a00 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10a10 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10a20 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
10a30 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
10a40 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
10a50 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10a60 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
10a70 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10a80 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
10a90 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
10aa0 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
10ab0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10ac0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
10ad0 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
10ae0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10af0 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10b00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
10b10 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
10b20 65 21 3d 4f 50 5f 43 6d 70 20 29 3b 0a 20 20 20  e!=OP_Cmp );.   
10b30 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10b40 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70  (res!=0, (pOp->p
10b50 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
10b60 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28  Q)?2:3);.    if(
10b70 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 67 6f   res ){.      go
10b80 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10b90 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
10ba0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10bb0 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
10bc0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
10bd0 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
10be0 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f   used by the OP_
10bf0 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72  Compare operator
10c00 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79   to be the array
10c10 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20  .** of integers 
10c20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  in P4..**.** The
10c30 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20   permutation is 
10c40 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c  only valid until
10c50 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d   the next OP_Com
10c60 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a  pare that has.**
10c70 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
10c80 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50  UTE bit set in P
10c90 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  5. Typically the
10ca0 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
10cb0 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72  should .** occur
10cc0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69   immediately pri
10cd0 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d  or to the OP_Com
10ce0 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  pare..**.** The 
10cf0 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e  first integer in
10d00 20 74 68 65 20 50 34 20 69 6e 74 65 67 65 72 20   the P4 integer 
10d10 61 72 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e  array is the len
10d20 67 74 68 20 6f 66 20 74 68 65 20 61 72 72 61 79  gth of the array
10d30 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74  .** and does not
10d40 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20   become part of 
10d50 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e  the permutation.
10d60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
10d70 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
10d80 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
10d90 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
10da0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10db0 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
10dc0 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
10dd0 20 2b 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   + 1;.  break;.}
10de0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
10df0 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
10e00 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
10e10 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
10e20 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
10e30 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
10e40 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
10e50 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
10e60 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
10e70 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
10e80 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
10e90 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
10ea0 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
10eb0 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
10ec0 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
10ed0 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
10ee0 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
10ef0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
10f00 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
10f10 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
10f20 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
10f30 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
10f40 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10f50 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10f60 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
10f70 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
10f80 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
10f90 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
10fa0 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
10fb0 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
10fc0 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
10fd0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
10fe0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
10ff0 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
11000 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11010 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
11020 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
11030 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
11040 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
11050 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
11060 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
11070 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
11080 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
11090 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
110a0 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
110b0 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
110c0 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
110d0 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
110e0 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
110f0 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
11100 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
11110 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
11120 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
11130 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
11140 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
11150 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
11160 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
11170 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
11180 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
11190 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
111a0 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
111b0 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
111c0 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
111d0 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
111e0 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
111f0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
11200 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
11210 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28   order */..  if(
11220 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
11230 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29  AG_PERMUTE)==0 )
11240 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
11250 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
11260 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
11270 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
11280 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
11290 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
112a0 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f  !=0 );.  p1 = pO
112b0 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
112c0 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54  p->p2;.#if SQLIT
112d0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50  E_DEBUG.  if( aP
112e0 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e  ermute ){.    in
112f0 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20  t k, mx = 0;.   
11300 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b   for(k=0; k<n; k
11310 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65  ++) if( aPermute
11320 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50  [k]>mx ) mx = aP
11330 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61  ermute[k];.    a
11340 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11350 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  1+mx<=(p->nMem+1
11360 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11370 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11380 70 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28  p2>0 && p2+mx<=(
11390 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
113a0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d  Cursor)+1 );.  }
113b0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
113c0 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d  ( p1>0 && p1+n<=
113d0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
113e0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
113f0 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
11400 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p2+n<=(p->nMem
11410 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
11420 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  +1 );.  }.#endif
11430 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
11440 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   */.  for(i=0; i
11450 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64  <n; i++){.    id
11460 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
11470 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
11480 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
11490 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b  sValid(&aMem[p1+
114a0 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73  idx]) );.    ass
114b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
114c0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29  &aMem[p2+idx]) )
114d0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
114e0 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d  RACE(p1+idx, &aM
114f0 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p1+idx]);.   
11500 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11510 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32  p2+idx, &aMem[p2
11520 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
11530 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
11540 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
11550 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
11560 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
11570 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
11580 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
11590 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
115a0 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
115b0 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61  aMem[p1+idx], &a
115c0 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
115d0 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
115e0 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
115f0 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
11600 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
11610 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
11620 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74   }.  }.  aPermut
11630 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
11640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
11650 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
11660 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
11670 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
11680 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
11690 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
116a0 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
116b0 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
116c0 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
116d0 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
116e0 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
116f0 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
11700 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
11710 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
11720 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
11730 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
11740 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
11750 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
11760 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
11770 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11780 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (0,3); pOp = &aO
11790 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  p[pOp->p1 - 1];.
117a0 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
117b0 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56  pare==0 ){.    V
117c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
117d0 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
117e0 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
117f0 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
11800 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
11810 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
11820 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20  >p3 - 1];.  }.  
11830 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11840 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
11850 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
11860 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
11870 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  && r[P2]).**.** 
11880 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
11890 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
118a0 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
118b0 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
118c0 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
118d0 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
118e0 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
118f0 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
11900 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
11910 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
11920 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
11930 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
11940 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
11950 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
11960 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
11970 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
11980 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
11990 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
119a0 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
119b0 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  || r[P2]).**.** 
119c0 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
119d0 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
119e0 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
119f0 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
11a00 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
11a10 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
11a20 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
11a30 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
11a40 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
11a50 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
11a60 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
11a70 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
11a80 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11a90 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
11aa0 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
11ab0 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
11ac0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11ae0 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
11af0 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
11b00 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11b20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
11b30 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
11b40 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
11b50 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
11b60 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
11b70 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
11b80 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
11b90 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
11ba0 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
11bb0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
11bc0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11bd0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
11be0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
11bf0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
11c00 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
11c10 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
11c20 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
11c30 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
11c40 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
11c50 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
11c60 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
11c70 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11c80 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
11c90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
11ca0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
11cb0 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
11cc0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
11cd0 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
11ce0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
11cf0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
11d00 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
11d10 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
11d20 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
11d30 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
11d40 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
11d50 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
11d60 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
11d70 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
11d80 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
11d90 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
11da0 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
11db0 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
11dc0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11dd0 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
11de0 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
11df0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
11e00 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
11e10 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
11e20 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
11e30 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
11e40 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
11e50 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11e60 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
11e70 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11e80 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a  : r[P2]= !r[P1].
11e90 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
11ea0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11eb0 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
11ec0 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
11ed0 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
11ee0 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
11ef0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11f00 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11f10 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
11f20 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
11f30 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
11f40 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11f50 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
11f60 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11f70 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
11f80 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
11f90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11fa0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
11fb0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
11fc0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
11fd0 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
11fe0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11ff0 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
12000 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
12010 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
12020 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56  >u.i = !sqlite3V
12030 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
12040 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
12050 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
12060 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
12070 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
12080 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
12090 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
120a0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
120b0 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
120c0 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
120d0 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
120e0 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
120f0 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
12100 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
12110 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
12120 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
12130 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
12140 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
12150 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
12160 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
12170 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
12180 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12190 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
121a0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
121b0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
121c0 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
121d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
121e0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
121f0 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
12200 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
12210 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69  Out->u.i = ~sqli
12220 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
12230 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
12240 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12250 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
12260 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
12270 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e  he "once" flag n
12280 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20  umber P1. If it 
12290 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20  is set, jump to 
122a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
122b0 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73  .** Otherwise, s
122c0 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20  et the flag and 
122d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
122e0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
122f0 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  tion..** In othe
12300 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70  r words, this op
12310 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20  code causes all 
12320 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65  following opcode
12330 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a  s up through P2.
12340 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c  ** (but not incl
12350 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e  uding P2) to run
12360 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74   just once and t
12370 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20  o be skipped on 
12380 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69  subsequent.** ti
12390 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  mes through the 
123a0 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  loop..**.** All 
123b0 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65  "once" flags are
123c0 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72   initially clear
123d0 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72  ed whenever a pr
123e0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
123f0 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73  .** first begins
12400 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65   to run..*/.case
12410 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
12420 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
12430 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
12440 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
12450 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  g );.  VdbeBranc
12460 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46  hTaken(p->aOnceF
12470 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c  lag[pOp->p1]!=0,
12480 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f   2);.  if( p->aO
12490 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
124a0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
124b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
124c0 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  {.    p->aOnceFl
124d0 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b  ag[pOp->p1] = 1;
124e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
124f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
12500 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
12510 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
12520 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
12530 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
12540 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
12550 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
12560 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
12570 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
12580 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
12590 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
125a0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
125b0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
125c0 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
125d0 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  o..*/./* Opcode:
125e0 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
125f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
12600 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
12610 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12620 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
12630 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
12640 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
12650 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
12660 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
12670 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
12680 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
12690 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
126a0 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
126b0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
126c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
126f0 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
12700 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
12710 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
12720 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  t c;.  pIn1 = &a
12730 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12740 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
12750 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
12760 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    c = pOp->p3;. 
12770 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53   }else{.#ifdef S
12780 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
12790 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20  ING_POINT.    c 
127a0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
127b0 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
127c0 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
127d0 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
127e0 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
127f0 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
12800 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
12810 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
12820 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
12830 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20  ken(c!=0, 2);.  
12840 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f 74  if( c ){.    got
12850 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12860 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12870 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
12880 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12890 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
128a0 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
128b0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
128c0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
128d0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
128e0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
128f0 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
12900 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
12910 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
12920 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
12930 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12940 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
12950 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
12960 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
12970 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
12980 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12990 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
129a0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
129b0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
129c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
129d0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
129e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
129f0 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
12a00 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
12a10 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
12a20 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12a30 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
12a40 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
12a50 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
12a60 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
12a70 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
12a80 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
12a90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12aa0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12ab0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
12ac0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
12ad0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
12ae0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12af0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
12b00 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
12b10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12b20 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
12b30 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
12b40 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
12b50 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
12b60 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
12b70 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
12b80 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
12b90 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
12ba0 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
12bb0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
12bc0 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
12bd0 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
12be0 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
12bf0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
12c00 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
12c10 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
12c20 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
12c30 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
12c40 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
12c50 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
12c60 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
12c70 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
12c80 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
12c90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
12ca0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
12cb0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
12cc0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
12cd0 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
12ce0 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
12cf0 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
12d00 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
12d10 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
12d20 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
12d30 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
12d40 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
12d50 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
12d60 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
12d70 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
12d80 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
12d90 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
12da0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
12db0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
12dc0 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
12dd0 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
12de0 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
12df0 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
12e00 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
12e10 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
12e20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
12e30 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
12e40 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
12e50 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
12e60 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
12e70 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
12e80 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
12e90 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
12ea0 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
12eb0 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
12ec0 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68  on P5 when.** th
12ed0 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
12ee0 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
12ef0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
12f00 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
12f10 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
12f20 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
12f30 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
12f40 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
12f50 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
12f60 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
12f70 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
12f80 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
12f90 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
12fa0 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
12fb0 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
12fc0 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
12fd0 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
12fe0 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
12ff0 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
13000 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
13010 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
13020 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
13030 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
13040 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
13050 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
13060 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
13070 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
13080 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
13090 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
130a0 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
130b0 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
130c0 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
130d0 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
130e0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
130f0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
13100 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
13110 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
13120 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
13130 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
13140 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
13150 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
13160 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
13170 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
13180 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
13190 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
131a0 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
131b0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
131c0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
131d0 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
131e0 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
131f0 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
13200 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
13210 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
13220 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
13230 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
13240 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20  header */.  u32 
13250 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f  offset;        /
13260 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  * Offset into th
13270 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34 20  e data */.  u64 
13280 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
13290 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20  * 64-bit offset 
132a0 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20  */.  u32 avail; 
132b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
132c0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76  r of bytes of av
132d0 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a  ailable data */.
132e0 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20    u32 t;        
132f0 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63       /* A type c
13300 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63  ode from the rec
13310 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  ord header */.  
13320 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20  Mem *pReg;      
13330 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c     /* PseudoTabl
13340 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
13350 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61   */..  pC = p->a
13360 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
13370 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a   p2 = pOp->p2;..
13380 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
13390 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c  or cache is stal
133a0 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74  e, bring it up-t
133b0 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d  o-date */.  rc =
133c0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
133d0 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26 70  orMoveto(&pC, &p
133e0 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
133f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
13400 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72  _error;..  asser
13410 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
13420 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
13430 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
13440 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  ) );.  pDest = &
13450 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
13460 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
13470 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61  e(p, pDest);.  a
13480 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
13490 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
134a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
134b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
134c0 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
134d0 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73  Field );.  aOffs
134e0 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74  et = pC->aOffset
134f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
13500 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13510 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65  E_VTAB );.  asse
13520 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
13530 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  !=CURTYPE_PSEUDO
13540 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   || pC->nullRow 
13550 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
13560 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13570 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a 20 20 70  PE_SORTER );.  p
13580 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
13590 75 72 73 6f 72 3b 0a 0a 20 20 69 66 28 20 70 43  ursor;..  if( pC
135a0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d 70  ->cacheStatus!=p
135b0 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20 20  ->cacheCtr ){   
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f               /*O
135d0 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46  PTIMIZATION-IF-F
135e0 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20 70  ALSE*/.    if( p
135f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
13600 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72      if( pC->eCur
13610 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53  Type==CURTYPE_PS
13620 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20  EUDO ){.        
13630 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
13640 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20  seudoTableReg>0 
13650 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
13660 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70  = &aMem[pC->uc.p
13670 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a  seudoTableReg];.
13680 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
13690 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pReg->flags & ME
136a0 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20  M_Blob );.      
136b0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
136c0 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20  alid(pReg) );.  
136d0 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61        pC->payloa
136e0 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f  dSize = pC->szRo
136f0 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67  w = avail = pReg
13700 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ->n;.        pC-
13710 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65  >aRow = (u8*)pRe
13720 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  g->z;.      }els
13730 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
13740 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
13750 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20  (pDest);.       
13760 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13770 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
13780 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
13790 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
137a0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
137b0 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
137c0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
137d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
137e0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
137f0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
13800 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
13810 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ize = sqlite3Btr
13820 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43  eePayloadSize(pC
13830 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  rsr);.      pC->
13840 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74  aRow = sqlite3Bt
13850 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28  reePayloadFetch(
13860 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a  pCrsr, &avail);.
13870 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76        assert( av
13880 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f  ail<=65536 );  /
13890 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  * Maximum page s
138a0 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a  ize is 64KiB */.
138b0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
138c0 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33  yloadSize <= (u3
138d0 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20  2)avail ){.     
138e0 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70     pC->szRow = p
138f0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a  C->payloadSize;.
13900 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
13910 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
13920 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69  > (u32)db->aLimi
13930 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
13940 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20  ENGTH] ){.      
13950 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
13960 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13970 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
13980 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a   avail;.      }.
13990 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61      }.    pC->ca
139a0 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63  cheStatus = p->c
139b0 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d  acheCtr;.    pC-
139c0 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65  >iHdrOffset = ge
139d0 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52  tVarint32(pC->aR
139e0 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20  ow, offset);.   
139f0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
13a00 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74  = 0;.    aOffset
13a10 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a  [0] = offset;...
13a20 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66      if( avail<of
13a30 66 73 65 74 20 29 7b 20 20 20 20 20 20 2f 2a 4f  fset ){      /*O
13a40 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46  PTIMIZATION-IF-F
13a50 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  ALSE*/.      /* 
13a60 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
13a70 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
13a80 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
13a90 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
13aa0 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
13ab0 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
13ac0 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
13ad0 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
13ae0 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
13af0 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
13b00 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
13b10 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
13b20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
13b30 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
13b40 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
13b50 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
13b60 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
13b70 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
13b80 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20  szRow = 0;..    
13b90 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
13ba0 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
13bb0 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
13bc0 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
13bd0 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20  eader..      ** 
13be0 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
13bf0 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
13c00 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
13c10 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  on..      **.   
13c20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69     ** Type entri
13c30 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65  es can be betwee
13c40 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20  n 1 and 5 bytes 
13c50 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64  each.  But 4 and
13c60 20 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a   5 byte.      **
13c70 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75   types use so mu
13c80 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68  ch data space th
13c90 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  at there can onl
13ca0 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32  y be 4096 and 32
13cb0 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
13cc0 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  m, respectively.
13cd0 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d    So the maximum
13ce0 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72   header length r
13cf0 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20  esults from a.  
13d00 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
13d10 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
13d20 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
13d30 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
13d40 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20   three.      ** 
13d50 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
13d60 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
13d70 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
13d80 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
13d90 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
13da0 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30  f( offset > 9830
13db0 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43  7 || offset > pC
13dc0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  ->payloadSize ){
13dd0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
13de0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
13df0 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  T;.        goto 
13e00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
13e10 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
13e20 7d 65 6c 73 65 20 69 66 28 20 6f 66 66 73 65 74  }else if( offset
13e30 3e 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41  >0 ){ /*OPTIMIZA
13e40 54 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a 20  TION-IF-TRUE*/. 
13e50 20 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c       /* The foll
13e60 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e  owing goto is an
13e70 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20   optimization.  
13e80 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65  It can be omitte
13e90 64 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 65  d and.      ** e
13ea0 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73  verything will s
13eb0 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20  till work.  But 
13ec0 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61  OP_Column is mea
13ed0 73 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20  surably faster. 
13ee0 20 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70       ** by skipp
13ef0 69 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65  ing the subseque
13f00 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20  nt conditional, 
13f10 77 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20  which is always 
13f20 74 72 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  true..      */. 
13f30 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
13f40 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73 73  >aRow;.      ass
13f50 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72  ert( pC->nHdrPar
13f60 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20  sed<=p2 );      
13f70 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61     /* Conditiona
13f80 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20  l skipped */.   
13f90 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13fa0 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20  n_read_header;. 
13fb0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d     }.  }..  /* M
13fc0 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73  ake sure at leas
13fd0 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31  t the first p2+1
13fe0 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20   entries of the 
13ff0 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e  header have been
14000 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64  .  ** parsed and
14010 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69   valid informati
14020 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74  on is in aOffset
14030 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  [] and pC->aType
14040 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  []..  */.  if( p
14050 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
14060 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  2 ){.    /* If t
14070 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61  here is more hea
14080 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  der available fo
14090 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65  r parsing in the
140a0 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20   record, try.   
140b0 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61   ** to extract a
140c0 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73  dditional fields
140d0 20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20   up through the 
140e0 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20  p2+1-th field . 
140f0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
14100 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66  ->iHdrOffset<aOf
14110 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  fset[0] ){.     
14120 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44   /* Make sure zD
14130 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e  ata points to en
14140 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f  ough of the reco
14150 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  rd to cover the 
14160 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20  header. */.     
14170 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
14180 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73   ){.        mems
14190 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
141a0 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20  eof(sMem));.    
141b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
141c0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
141d0 28 70 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73  (pCrsr, 0, aOffs
141e0 65 74 5b 30 5d 2c 20 21 70 43 2d 3e 69 73 54 61  et[0], !pC->isTa
141f0 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  ble, &sMem);.   
14200 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
14210 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
14220 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
14230 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
14240 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
14250 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14260 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
14270 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
14280 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
14290 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
142a0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
142b0 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
142c0 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
142d0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
142e0 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
142f0 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
14300 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
14310 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
14320 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
14330 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
14340 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
14350 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
14360 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
14370 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
14380 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c  ( (t = zHdr[0])<
14390 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
143a0 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20    zHdr++;.      
143b0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
143c0 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79  sqlite3VdbeOneBy
143d0 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  teSerialTypeLen(
143e0 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
143f0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
14400 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
14410 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
14420 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  );.          off
14430 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
14440 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
14450 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n(t);.        }.
14460 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
14470 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20  e[i++] = t;.    
14480 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
14490 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
144a0 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
144b0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
144c0 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
144d0 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dr );..      /* 
144e0 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
144f0 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
14500 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
14510 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
14520 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
14530 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
14540 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
14550 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
14560 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
14570 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
14580 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
14590 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
145a0 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
145b0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
145c0 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
145d0 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
145e0 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
145f0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
14600 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
14610 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
14620 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
14630 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
14640 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
14650 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
14660 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
14670 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
14680 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
14690 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
146a0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  em);.        rc 
146b0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
146c0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
146d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
146e0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
146f0 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
14700 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
14710 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
14720 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
14730 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
14740 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
14750 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
14760 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
14770 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20   }else{.      t 
14780 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
14790 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
147a0 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65  ng to extract ne
147b0 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
147c0 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
147d0 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
147e0 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
147f0 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
14800 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
14810 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
14820 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
14830 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
14840 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
14850 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
14860 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
14870 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
14880 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
14890 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
148a0 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
148b0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
148c0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
148d0 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
148e0 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
148f0 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
14900 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
14910 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
14920 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d  (pDest);.      }
14930 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
14940 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
14950 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20  .  }else{.    t 
14960 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
14970 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
14980 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
14990 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
149a0 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
149b0 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
149c0 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
149d0 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
149e0 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
149f0 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  d pC->aType[p2] 
14a00 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
14a10 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
14a20 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
14a30 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
14a40 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
14a50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
14a60 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
14a70 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
14a80 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  ) );.  if( VdbeM
14a90 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
14aa0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
14ab0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
14ac0 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  est);.  }.  asse
14ad0 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65  rt( t==pC->aType
14ae0 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43  [p2] );.  if( pC
14af0 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
14b00 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
14b10 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
14b20 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
14b30 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
14b40 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
14b50 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
14b60 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
14b70 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
14b80 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
14b90 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20  ge */.    zData 
14ba0 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66  = pC->aRow + aOf
14bb0 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66  fset[p2];.    if
14bc0 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20  ( t<12 ){.      
14bd0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14be0 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
14bf0 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
14c00 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
14c10 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
14c20 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e  s a string, we n
14c30 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74  eed a persistent
14c40 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20   value, not.    
14c50 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d    ** a MEM_Ephem
14c60 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72   value.  This br
14c70 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73  anch is a fast s
14c80 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73  hort-cut that is
14c90 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20   equivalent.    
14ca0 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20    ** to calling 
14cb0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14cc0 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74  lGet() and sqlit
14cd0 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61  e3VdbeDeephemera
14ce0 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lize()..      */
14cf0 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
14d00 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20  nst u16 aFlag[] 
14d10 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45  = { MEM_Blob, ME
14d20 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d  M_Str|MEM_Term }
14d30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e  ;.      pDest->n
14d40 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f   = len = (t-12)/
14d50 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  2;.      pDest->
14d60 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
14d70 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74 2d        if( pDest-
14d80 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b  >szMalloc < len+
14d90 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65  2 ){.        pDe
14da0 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  st->flags = MEM_
14db0 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  Null;.        if
14dc0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
14dd0 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b  Grow(pDest, len+
14de0 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  2, 0) ) goto no_
14df0 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
14e00 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d  {.        pDest-
14e10 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  >z = pDest->zMal
14e20 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  loc;.      }.   
14e30 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d     memcpy(pDest-
14e40 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b  >z, zData, len);
14e50 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
14e60 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  len] = 0;.      
14e70 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
14e80 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
14e90 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b  ->flags = aFlag[
14ea0 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  t&1];.    }.  }e
14eb0 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e  lse{.    pDest->
14ec0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
14ed0 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
14ee0 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
14ef0 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
14f00 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
14f10 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70  s */.    if( ((p
14f20 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
14f30 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41  _LENGTHARG|OPFLA
14f40 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30  G_TYPEOFARG))!=0
14f50 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28  .          && ((
14f60 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
14f70 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
14f80 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
14f90 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20  G)!=0)).     || 
14fa0 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64  (len = sqlite3Vd
14fb0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
14fc0 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20  t))==0.    ){.  
14fd0 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
14fe0 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
14ff0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20  .      **    1. 
15000 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
15010 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20  ction,.      ** 
15020 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68     2. the length
15030 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
15040 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64  X is a blob, and
15050 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20  .      **    3. 
15060 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c  if the content l
15070 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20  ength is zero.. 
15080 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69       ** So we mi
15090 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20  ght as well use 
150a0 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
150b0 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
150c0 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  g.      ** conte
150d0 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 2a 2f  nt from disk. */
150e0 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75 38  .      static u8
150f0 20 61 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a 20 54   aZero[8];  /* T
15100 68 69 73 20 69 73 20 74 68 65 20 62 6f 67 75 73  his is the bogus
15110 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20   content */.    
15120 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
15130 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c  ialGet(aZero, t,
15140 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
15150 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
15160 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
15170 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
15180 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
15190 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20  !pC->isTable,.  
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
151d0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
151e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
151f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
15200 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
15210 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38  ialGet((const u8
15220 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70  *)pDest->z, t, p
15230 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65  Dest);.      pDe
15240 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  st->flags &= ~ME
15250 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20  M_Ephem;.    }. 
15260 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75   }..op_column_ou
15270 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  t:.  UPDATE_MAX_
15280 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
15290 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
152a0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
152b0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
152c0 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
152d0 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
152e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
152f0 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a  inity(r[P1@P2]).
15300 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
15310 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
15320 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
15330 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
15340 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
15350 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
15360 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
15370 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61  ong. The nth cha
15380 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
15390 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
153a0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
153b0 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
153c0 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
153d0 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20  e nth.** memory 
153e0 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67  cell in the rang
153f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66  e..*/.case OP_Af
15400 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73  finity: {.  cons
15410 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74  t char *zAffinit
15420 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69  y;   /* The affi
15430 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
15440 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66  ed */.  char cAf
15450 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
15460 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61   /* A single cha
15470 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69  racter of affini
15480 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69  ty */..  zAffini
15490 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
154a0 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
154b0 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  ity!=0 );.  asse
154c0 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f  rt( zAffinity[pO
154d0 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70  p->p2]==0 );.  p
154e0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
154f0 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28  >p1];.  while( (
15500 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69  cAff = *(zAffini
15510 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20  ty++))!=0 ){.   
15520 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d   assert( pIn1 <=
15530 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d   &p->aMem[(p->nM
15540 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
15550 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
15560 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
15570 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  n1) );.    apply
15580 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63  Affinity(pIn1, c
15590 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Aff, encoding);.
155a0 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
155b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
155c0 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
155d0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
155e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
155f0 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32  3]=mkrec(r[P1@P2
15600 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  ]).**.** Convert
15610 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
15620 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
15630 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64  into the [record
15640 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20   format].** use 
15650 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
15660 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
15670 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
15680 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
15690 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
156a0 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64  opcode can decod
156b0 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74  e the record lat
156c0 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  er..**.** P4 may
156d0 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
156e0 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
156f0 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
15700 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
15710 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
15720 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
15730 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
15740 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
15750 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
15760 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
15770 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
15780 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
15790 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
157a0 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
157b0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
157c0 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
157d0 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
157e0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
157f0 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
15800 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
15810 74 68 65 20 61 66 66 69 6e 69 74 79 20 42 4c 4f  the affinity BLO
15820 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  B..*/.case OP_Ma
15830 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38  keRecord: {.  u8
15840 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
15850 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
15860 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
15870 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
15880 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
15890 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
158a0 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
158b0 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
158c0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  a;             /
158d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
158e0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
158f0 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20  */.  int nHdr;  
15900 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15910 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
15920 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
15930 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
15940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
15950 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
15960 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
15970 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f  d */.  i64 nZero
15980 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15990 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
159a0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
159b0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
159c0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
159d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
159e0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
159f0 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
15a00 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
15a10 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
15a20 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
15a30 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
15a40 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
15a50 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
15a60 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
15a70 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
15a80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
15a90 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
15aa0 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
15ab0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
15ac0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
15ad0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
15ae0 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
15af0 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
15b00 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
15b10 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
15b20 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
15b30 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
15b40 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
15b50 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
15b60 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
15b90 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68  n zNewRecord[] h
15ba0 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a  eader */.  int j
15bb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15bc0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
15bd0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
15be0 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75 33 32  content */.  u32
15bf0 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
15c00 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
15c10 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f   a field */..  /
15c20 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
15c30 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
15c40 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
15c50 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
15c60 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
15c70 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
15c80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ca0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15cb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15cc0 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
15cd0 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
15ce0 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
15cf0 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
15d00 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
15d10 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
15d20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d60 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
15d70 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
15d80 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
15d90 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
15da0 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
15db0 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74    ** and so fort
15dc0 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
15dd0 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
15de0 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
15df0 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
15e00 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
15e10 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
15e20 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
15e30 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
15e40 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
15e50 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
15e60 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
15e70 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
15e80 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
15e90 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
15ea0 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
15eb0 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
15ec0 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
15ed0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15ee0 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
15ef0 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d  pace */.  nHdr =
15f00 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
15f10 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
15f20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
15f30 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20  */.  nZero = 0; 
15f40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15f50 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15f60 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15f70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46  e record */.  nF
15f80 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ield = pOp->p1;.
15f90 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
15fa0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
15fb0 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70  t( nField>0 && p
15fc0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
15fd0 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e  >p2+nField<=(p->
15fe0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
15ff0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74  sor)+1 );.  pDat
16000 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c  a0 = &aMem[nFiel
16010 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  d];.  nField = p
16020 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20  Op->p2;.  pLast 
16030 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64  = &pData0[nField
16040 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d  -1];.  file_form
16050 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at = p->minWrite
16060 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f  FileFormat;..  /
16070 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f  * Identify the o
16080 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  utput register *
16090 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
160a0 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
160b0 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
160c0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
160d0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
160e0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
160f0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
16100 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65  ..  /* Apply the
16110 20 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e   requested affin
16120 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74  ity to all input
16130 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  s.  */.  assert(
16140 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
16150 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74  ;.  if( zAffinit
16160 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20  y ){.    pRec = 
16170 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a  pData0;.    do{.
16180 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
16190 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41  ity(pRec++, *(zA
161a0 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f  ffinity++), enco
161b0 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73  ding);.      ass
161c0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ert( zAffinity[0
161d0 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c  ]==0 || pRec<=pL
161e0 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c  ast );.    }whil
161f0 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20  e( zAffinity[0] 
16200 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f  );.  }..  /* Loo
16210 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
16220 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
16230 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
16240 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
16250 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
16260 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
16270 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
16280 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65  cord..  */.  pRe
16290 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b  c = pLast;.  do{
162a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
162b0 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
162c0 0a 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70  .    pRec->uTemp
162d0 20 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d   = serial_type =
162e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
162f0 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
16300 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b  e_format, &len);
16310 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
16320 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
16330 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61  ){.      if( nDa
16340 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  ta ){.        if
16350 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
16360 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
16370 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
16380 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16390 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
163a0 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
163b0 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63       len -= pRec
163c0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
163d0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61   }.    }.    nDa
163e0 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74  ta += len;.    t
163f0 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
16400 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20  type==127 );.   
16410 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
16420 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20  l_type==128 );. 
16430 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61     nHdr += seria
16440 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20  l_type<=127 ? 1 
16450 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  : sqlite3VarintL
16460 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
16470 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d 3d 70  .    if( pRec==p
16480 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b 0a 20  Data0 ) break;. 
16490 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68     pRec--;.  }wh
164a0 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56  ile(1);..  /* EV
164b0 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35  IDENCE-OF: R-225
164c0 36 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61  64-11647 The hea
164d0 64 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20  der begins with 
164e0 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a  a single varint.
164f0 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72    ** which deter
16500 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20  mines the total 
16510 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
16520 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54  in the header. T
16530 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76  he varint.  ** v
16540 61 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65  alue is the size
16550 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69   of the header i
16560 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e  n bytes includin
16570 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
16580 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a  t.  ** itself. *
16590 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  /.  testcase( nH
165a0 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73  dr==126 );.  tes
165b0 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37  tcase( nHdr==127
165c0 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d   );.  if( nHdr<=
165d0 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  126 ){.    /* Th
165e0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f  e common case */
165f0 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a  .    nHdr += 1;.
16600 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
16610 52 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72  Rare case of a r
16620 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64  eally large head
16630 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e  er */.    nVarin
16640 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
16650 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20  tLen(nHdr);.    
16660 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b  nHdr += nVarint;
16670 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74  .    if( nVarint
16680 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
16690 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b  n(nHdr) ) nHdr++
166a0 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
166b0 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66  nHdr+nData;.  if
166c0 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62  ( nByte+nZero>db
166d0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
166e0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
166f0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
16700 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
16710 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
16720 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
16730 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
16740 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
16750 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
16760 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
16770 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
16780 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
16790 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
167a0 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
167b0 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
167c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
167d0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
167e0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
167f0 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20  dResize() could 
16800 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
16810 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
16820 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
16830 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
16840 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
16850 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20  ut, (int)nByte) 
16860 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
16870 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
16880 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
16890 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
168a0 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
168b0 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
168c0 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
168d0 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b  dr);.  j = nHdr;
168e0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
168f0 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52  0<=pLast );.  pR
16900 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64  ec = pData0;.  d
16910 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  o{.    serial_ty
16920 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70  pe = pRec->uTemp
16930 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  ;.    /* EVIDENC
16940 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37  E-OF: R-06529-47
16950 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68  362 Following th
16960 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72  e size varint ar
16970 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20  e one or more.  
16980 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20    ** additional 
16990 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72  varints, one per
169a0 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20   column. */.    
169b0 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
169c0 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
169d0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
169e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72            /* ser
169f0 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20  ial type */.    
16a00 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
16a10 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68  R-64536-51728 Th
16a20 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63  e values for eac
16a30 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
16a40 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d  record.    ** im
16a50 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
16a60 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
16a70 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33      j += sqlite3
16a80 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a  VdbeSerialPut(&z
16a90 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52  NewRecord[j], pR
16aa0 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  ec, serial_type)
16ab0 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  ; /* content */.
16ac0 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65    }while( (++pRe
16ad0 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61  c)<=pLast );.  a
16ae0 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29  ssert( i==nHdr )
16af0 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e  ;.  assert( j==n
16b00 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72  Byte );..  asser
16b10 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
16b20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
16b30 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
16b40 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ) );.  pOut->n =
16b50 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
16b60 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
16b70 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65  _Blob;.  if( nZe
16b80 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ro ){.    pOut->
16b90 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b  u.nZero = nZero;
16ba0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
16bb0 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20   |= MEM_Zero;.  
16bc0 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  }.  pOut->enc = 
16bd0 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a  SQLITE_UTF8;  /*
16be0 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f   In case the blo
16bf0 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72  b is ever conver
16c00 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ted to text */. 
16c10 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
16c20 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
16c30 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
16c40 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
16c50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
16c60 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20  de: Count P1 P2 
16c70 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
16c80 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29  s: r[P2]=count()
16c90 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
16ca0 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
16cb0 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76  es (an integer v
16cc0 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62  alue) in the tab
16cd0 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20  le or index .** 
16ce0 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
16cf0 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20   P1 in register 
16d00 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  P2.*/.#ifndef SQ
16d10 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
16d20 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75  OUNT.case OP_Cou
16d30 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  nt: {         /*
16d40 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e   out2 */.  i64 n
16d50 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f  Entry;.  BtCurso
16d60 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73  r *pCrsr;..  ass
16d70 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
16d80 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65  p->p1]->eCurType
16d90 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
16da0 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  );.  pCrsr = p->
16db0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
16dc0 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
16dd0 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
16de0 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a   nEntry = 0;  /*
16df0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
16e00 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
16e10 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
16e20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
16e30 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
16e40 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66 28   &nEntry);.  if(
16e50 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
16e60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16e70 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
16e80 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
16e90 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45    pOut->u.i = nE
16ea0 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ntry;.  break;.}
16eb0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
16ec0 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31  de: Savepoint P1
16ed0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
16ee0 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72  Open, release or
16ef0 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61   rollback the sa
16f00 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79  vepoint named by
16f10 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64   parameter P4, d
16f20 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74  epending.** on t
16f30 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20  he value of P1. 
16f40 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61  To open a new sa
16f50 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20  vepoint, P1==0. 
16f60 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
16f70 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69  it) an.** existi
16f80 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ng savepoint, P1
16f90 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62  ==1, or to rollb
16fa0 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ack an existing 
16fb0 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e  savepoint P1==2.
16fc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65  .*/.case OP_Save
16fd0 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70  point: {.  int p
16fe0 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
16ff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
17000 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e  lue of P1 operan
17010 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  d */.  char *zNa
17020 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
17030 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
17040 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20  f savepoint */. 
17050 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61   int nName;.  Sa
17060 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20  vepoint *pNew;. 
17070 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
17080 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f  epoint;.  Savepo
17090 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74  int *pTmp;.  int
170a0 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69   iSavepoint;.  i
170b0 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70  nt ii;..  p1 = p
170c0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20  Op->p1;.  zName 
170d0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20  = pOp->p4.z;..  
170e0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
170f0 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20  he p1 parameter 
17100 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74  is valid. Also t
17110 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20  hat if there is 
17120 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61  no open.  ** tra
17130 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nsaction, then t
17140 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61  here cannot be a
17150 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a  ny savepoints. .
17160 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64    */.  assert( d
17170 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30  b->pSavepoint==0
17180 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   || db->autoComm
17190 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
171a0 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
171b0 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45  _BEGIN||p1==SAVE
171c0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70  POINT_RELEASE||p
171d0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
171e0 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72  LBACK );.  asser
171f0 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
17200 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  t || db->isTrans
17210 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
17220 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
17230 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
17240 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73  unt(db) );.  ass
17250 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
17260 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d  r );..  if( p1==
17270 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
17280 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
17290 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
172a0 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
172b0 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
172c0 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
172d0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
172e0 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
172f0 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
17300 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
17310 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
17320 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
17330 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
17340 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61  VdbeError(p, "ca
17350 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f  nnot open savepo
17360 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
17370 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
17380 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
17390 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
173a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61  }else{.      nNa
173b0 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  me = sqlite3Strl
173c0 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69  en30(zName);..#i
173d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
173e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
173f0 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c       /* This cal
17400 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20  l is Ok even if 
17410 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69  this savepoint i
17420 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61  s actually a tra
17430 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a  nsaction.      *
17440 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64  * savepoint (and
17450 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c   therefore shoul
17460 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61  d not prompt xSa
17470 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62  vepoint()) callb
17480 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49  acks..      ** I
17490 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  f this is a tran
174a0 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
174b0 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20  t being opened, 
174c0 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
174d0 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74  .      ** that t
174e0 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d  he db->aVTrans[]
174f0 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e   array is empty.
17500 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
17510 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t( db->autoCommi
17520 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72  t==0 || db->nVTr
17530 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ans==0 );.      
17540 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
17550 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
17560 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20  VEPOINT_BEGIN,. 
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
17590 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62  b->nStatement+db
175a0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  ->nSavepoint);. 
175b0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
175c0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
175d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
175e0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  ;.#endif..      
175f0 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  /* Create a new 
17600 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74  savepoint struct
17610 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e  ure. */.      pN
17620 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ew = sqlite3DbMa
17630 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69  llocRawNN(db, si
17640 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
17650 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
17660 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
17670 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
17680 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
17690 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
176a0 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
176b0 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
176c0 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
176d0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
176e0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
176f0 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
17700 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
17710 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
17720 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
17730 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
17740 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17750 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
17760 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
17770 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
17780 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
17790 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
177a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
177b0 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
177c0 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
177d0 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
177e0 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
177f0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
17800 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
17810 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
17820 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
17830 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
17840 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
17850 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
17860 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
17870 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
17880 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
17890 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
178a0 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
178b0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
178c0 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
178d0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
178e0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
178f0 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
17900 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
17910 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
17920 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
17930 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
17940 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
17950 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
17960 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
17970 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
17980 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
17990 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
179a0 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
179b0 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
179c0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
179d0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
179e0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
179f0 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
17a00 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
17a10 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
17a20 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
17a30 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
17a40 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20  ror(p, "no such 
17a50 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
17a60 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
17a70 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17a80 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
17a90 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17aa0 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
17ab0 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
17ac0 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
17ad0 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
17ae0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
17af0 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
17b00 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
17b10 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
17b20 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f  ements..      */
17b30 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
17b40 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
17b50 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70  ot release savep
17b60 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17b90 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17ba0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
17bb0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
17bc0 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
17bd0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
17be0 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
17bf0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
17c00 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
17c10 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
17c20 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
17c30 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
17c40 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
17c50 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
17c60 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
17c70 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
17c80 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
17c90 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17ca0 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
17cb0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17cc0 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
17cd0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
17ce0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17cf0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
17d00 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
17d10 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
17d20 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
17d30 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
17d40 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17d50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17d60 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17d70 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
17d80 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
17d90 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
17da0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
17db0 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
17dc0 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20  - aOp);.        
17dd0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17de0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
17df0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
17e00 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
17e10 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17e20 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
17e30 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
17e40 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
17e50 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
17e60 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
17e70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17e80 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61   int isSchemaCha
17e90 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61  nge;.        iSa
17ea0 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
17eb0 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
17ec0 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
17ed0 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
17ee0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
17ef0 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
17f00 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d  emaChange = (db-
17f10 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
17f20 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
17f30 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
17f40 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
17f50 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
17f60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
17f70 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
17f80 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
17f90 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20  ].pBt,.         
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
17fc0 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
17fd0 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ACK,.           
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63              isSc
18000 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a  hemaChange==0);.
18010 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
18020 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
18030 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18040 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
18050 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
18060 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73  se{.          is
18070 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30  SchemaChange = 0
18080 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
18090 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
180a0 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
180b0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
180c0 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
180d0 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
180e0 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
180f0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
18100 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18110 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
18120 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
18130 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
18140 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18150 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73  }.        if( is
18160 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a  SchemaChange ){.
18170 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
18180 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
18190 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
181a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
181b0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
181c0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
181d0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
181e0 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
181f0 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
18200 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
18210 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
18220 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
18230 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
18240 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
18250 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
18260 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
18270 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
18280 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
18290 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
182a0 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
182b0 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
182c0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
182d0 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
182e0 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
182f0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
18300 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
18310 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
18320 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
18330 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
18340 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
18350 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
18360 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
18370 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
18380 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
18390 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
183a0 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
183b0 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
183c0 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
183d0 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
183e0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
183f0 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
18400 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
18410 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
18420 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
18430 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
18440 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
18450 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
18460 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
18470 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
18480 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
18490 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
184a0 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
184b0 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
184c0 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
184d0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
184e0 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
184f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
18500 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
18510 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
18520 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
18530 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
18540 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
18550 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18560 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
18570 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
18580 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
18590 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
185a0 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
185b0 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
185c0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
185d0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
185e0 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
185f0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20  sTransaction || 
18600 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
18610 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
18620 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
18630 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
18640 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
18650 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
18660 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18670 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18680 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
18690 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
186a0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
186b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62  e_to_error;..  b
186c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
186d0 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
186e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
186f0 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
18700 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
18710 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
18720 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
18730 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
18740 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
18750 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
18760 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
18770 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
18780 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
18790 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
187a0 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
187b0 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
187c0 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
187d0 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
187e0 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
187f0 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
18800 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
18810 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
18820 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
18830 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
18840 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
18850 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
18860 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
18870 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20  nt iRollback;.. 
18880 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
18890 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
188a0 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
188b0 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64  >p2;.  assert( d
188c0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
188d0 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
188e0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
188f0 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
18900 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
18910 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
18920 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e  .  assert( db->n
18930 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20  VdbeActive>0 ); 
18940 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
18950 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
18960 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  ve */.  assert( 
18970 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
18980 0a 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75  .  if( desiredAu
18990 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
189a0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
189b0 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
189c0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
189d0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
189e0 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
189f0 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
18a00 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  db, SQLITE_ABORT
18a10 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20  _ROLLBACK);.    
18a20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
18a30 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
18a40 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
18a50 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64  ommit && db->nVd
18a60 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
18a70 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
18a80 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
18a90 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
18aa0 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
18ab0 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a  writing.      **
18ac0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
18ad0 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
18ae0 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
18af0 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
18b00 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  st. .      */.  
18b10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
18b20 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
18b30 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
18b40 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  on - ".         
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b60 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
18b70 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
18b80 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
18b90 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
18ba0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18bb0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
18bc0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
18bd0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
18be0 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
18bf0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
18c00 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
18c10 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
18c20 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
18c30 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
18c40 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  it;.    }.    if
18c50 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
18c60 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
18c70 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
18c80 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
18c90 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Op);.      db->a
18ca0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
18cb0 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
18cc0 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e  mmit);.      p->
18cd0 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
18ce0 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
18cf0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18d00 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
18d10 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
18d20 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
18d30 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
18d40 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
18d50 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
18d60 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
18d70 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
18d80 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
18d90 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
18da0 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
18db0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
18dc0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
18dd0 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
18de0 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
18df0 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
18e00 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
18e10 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
18e20 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
18e30 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
18e40 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
18e50 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
18e60 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
18e90 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
18ea0 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
18eb0 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
18ec0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
18ed0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18ee0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
18ef0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
18f00 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
18f10 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
18f20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61  P5.**.** Begin a
18f30 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
18f40 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61  database P1 if a
18f50 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
18f60 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61  not already.** a
18f70 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20  ctive..** If P2 
18f80 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
18f90 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
18fa0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
18fb0 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65  , or if a .** re
18fc0 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
18fd0 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  s already active
18fe0 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64  , it is upgraded
18ff0 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e   to a write-tran
19000 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50  saction..** If P
19010 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  2 is zero, then 
19020 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  a read-transacti
19030 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a  on is started..*
19040 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
19050 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
19060 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
19070 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
19080 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
19090 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
190a0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
190b0 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
190c0 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
190d0 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
190e0 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
190f0 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
19100 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
19110 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
19120 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ses..**.** If a 
19130 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
19140 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
19150 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
19160 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
19170 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
19180 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
19190 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
191a0 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
191b0 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
191c0 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
191d0 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
191e0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
191f0 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
19200 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
19210 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
19220 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19230 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
19240 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
19250 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
19260 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
19270 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
19280 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
19290 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
192a0 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
192b0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
192c0 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
192d0 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
192e0 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
192f0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
19300 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
19310 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
19320 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
19330 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
19340 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
19350 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
19360 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
19370 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
19380 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
19390 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
193a0 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
193b0 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
193c0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  en this opcode a
193d0 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73  lso checks the s
193e0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61  chema cookie aga
193f0 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74  inst P3.** and t
19400 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
19410 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61  tion counter aga
19420 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20  inst P4..** The 
19430 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
19440 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
19450 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
19460 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
19470 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
19480 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
19490 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
194a0 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
194b0 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
194c0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
194d0 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
194e0 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  ead the schema. 
194f0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a   If the schema.*
19500 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64  * cookie in P3 d
19510 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
19520 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e  schema cookie in
19530 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
19540 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68  ader or.** if th
19550 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
19560 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50  ion counter in P
19570 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  4 differs from t
19580 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65  he current.** ge
19590 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
195a0 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45  , then an SQLITE
195b0 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73  _SCHEMA error is
195c0 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63   raised and exec
195d0 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20  ution.** halts. 
195e0 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   The sqlite3_ste
195f0 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63  p() wrapper func
19600 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20  tion might then 
19610 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a  reprepare the.**
19620 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
19630 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65  erun it from the
19640 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63   beginning..*/.c
19650 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
19660 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
19670 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  Bt;.  int iMeta;
19680 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20  .  int iGen;..  
19690 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
196a0 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
196b0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
196c0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29   || pOp->p2==0 )
196d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
196e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
196f0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
19700 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
19710 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
19720 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66  pOp->p1) );.  if
19730 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62  ( pOp->p2 && (db
19740 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
19750 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29  _QueryOnly)!=0 )
19760 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
19770 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20  E_READONLY;.    
19780 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19790 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
197a0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
197b0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66  ->p1].pBt;..  if
197c0 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20  ( pBt ){.    rc 
197d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
197e0 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f  ginTrans(pBt, pO
197f0 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74  p->p2);.    test
19800 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
19810 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29  _BUSY_SNAPSHOT )
19820 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
19830 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
19840 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20  RECOVERY );.    
19850 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
19860 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
19870 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
19880 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
19890 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a      p->rc = rc;.
198a0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
198b0 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
198c0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
198d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
198e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
198f0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
19900 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
19910 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
19920 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
19930 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
19940 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
19950 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
19960 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
19970 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
19980 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
19990 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
199a0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
199b0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
199c0 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
199d0 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
199e0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
199f0 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
19a00 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
19a10 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
19a20 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
19a30 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
19a40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
19a50 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
19a60 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
19a70 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
19a80 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
19a90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
19aa0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19ab0 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
19ac0 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
19ad0 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
19ae0 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
19af0 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
19b00 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
19b10 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
19b20 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
19b30 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
19b40 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
19b50 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
19b60 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
19b70 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
19b80 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
19b90 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
19ba0 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
19bb0 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
19bc0 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
19bd0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
19be0 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
19bf0 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
19c00 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
19c10 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47  .    }..    /* G
19c20 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d 61  ather the schema
19c30 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
19c40 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20  for checking:.  
19c50 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    ** IMPLEMENTAT
19c60 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32 31 39 35 2d  ION-OF: R-32195-
19c70 31 39 34 36 35 20 54 68 65 20 73 63 68 65 6d 61  19465 The schema
19c80 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64   version is used
19c90 20 62 79 20 53 51 4c 69 74 65 0a 20 20 20 20 2a   by SQLite.    *
19ca0 2a 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75  * each time a qu
19cb0 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
19cc0 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
19cd0 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68  he internal cach
19ce0 65 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  e of the.    ** 
19cf0 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e  schema used when
19d00 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53   compiling the S
19d10 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73  QL query matches
19d20 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74   the schema of t
19d30 68 65 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61  he.    ** databa
19d40 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63 68  se against which
19d50 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
19d60 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20  ery is actually 
19d70 65 78 65 63 75 74 65 64 2e 0a 20 20 20 20 2a 2f  executed..    */
19d80 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
19d90 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
19da0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
19db0 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
19dc0 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
19dd0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19de0 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
19df0 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
19e00 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
19e10 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
19e20 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
19e30 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
19e40 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
19e50 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
19e60 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
19e70 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
19e80 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
19e90 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
19ea0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
19eb0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
19ec0 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
19ed0 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
19ee0 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
19ef0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
19f00 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
19f10 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
19f20 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
19f30 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
19f40 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
19f50 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
19f60 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
19f70 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
19f80 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
19f90 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
19fa0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
19fb0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
19fc0 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
19fd0 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
19fe0 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
19ff0 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
1a000 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
1a010 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
1a020 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
1a030 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
1a040 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
1a050 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
1a060 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
1a070 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
1a080 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
1a090 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
1a0a0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
1a0b0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
1a0c0 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
1a0d0 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
1a0e0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1a0f0 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
1a100 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
1a110 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
1a120 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
1a130 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
1a140 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
1a150 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
1a160 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
1a170 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
1a180 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
1a190 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
1a1a0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
1a1b0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
1a1c0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1a1d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1a1e0 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
1a1f0 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
1a200 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
1a210 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
1a220 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
1a230 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
1a240 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
1a250 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
1a260 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1a270 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a280 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1a290 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
1a2a0 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
1a2b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
1a2c0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
1a2d0 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
1a2e0 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1a2f0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1a300 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1a310 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1a320 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1a330 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1a340 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1a350 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1a360 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1a370 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1a380 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1a390 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1a3a0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1a3b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1a3c0 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1a3d0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1a3e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1a3f0 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1a400 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1a410 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1a420 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1a430 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1a440 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1a450 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1a460 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1a470 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a480 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1a490 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1a4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1a4b0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1a4c0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1a4d0 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1a4e0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a4f0 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1a500 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1a510 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1a520 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1a530 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1a540 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1a550 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1a560 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1a570 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1a580 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1a590 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1a5a0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1a5b0 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1a5c0 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1a5d0 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1a5e0 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1a5f0 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1a600 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1a610 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1a620 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1a630 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a640 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1a650 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1a660 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65  Write the intege
1a670 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20  r value P3 into 
1a680 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
1a690 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
1a6a0 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65  .** P2==1 is the
1a6b0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1a6c0 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64    P2==2 is the d
1a6d0 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1a6e0 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  ** P2==3 is the 
1a6f0 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1a700 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
1a710 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1a720 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
1a730 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1a740 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1a750 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
1a760 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
1a770 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1a780 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
1a790 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
1a7a0 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
1a7b0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
1a7c0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
1a7d0 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  _SetCookie: {.  
1a7e0 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
1a7f0 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
1a800 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1a810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a820 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1a830 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1a840 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1a850 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1a860 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
1a870 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1a880 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
1a890 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
1a8a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
1a8b0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
1a8c0 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1a8d0 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1a8e0 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
1a8f0 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
1a900 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
1a910 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
1a920 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
1a930 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
1a940 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
1a950 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29  Op->p2, pOp->p3)
1a960 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1a970 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1a980 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1a990 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1a9a0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1a9b0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1a9c0 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1a9d0 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1a9e0 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1a9f0 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1aa00 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
1aa10 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
1aa20 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66  nges;.  }else if
1aa30 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1aa40 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a  _FILE_FORMAT ){.
1aa50 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68      /* Record ch
1aa60 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c  anges in the fil
1aa70 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20  e format */.    
1aa80 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1aa90 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d  le_format = pOp-
1aaa0 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  >p3;.  }.  if( p
1aab0 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
1aac0 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
1aad0 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
1aae0 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
1aaf0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
1ab00 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
1ab10 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
1ab20 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
1ab30 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
1ab40 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
1ab50 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
1ab60 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
1ab70 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1ab80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ab90 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1aba0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61   Opcode: OpenRea
1abb0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  d P1 P2 P3 P4 P5
1abc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1abd0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1abe0 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f  ** Open a read-o
1abf0 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74  nly cursor for t
1ac00 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
1ac10 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  e whose root pag
1ac20 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20  e is.** P2 in a 
1ac30 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
1ac40 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  The database fil
1ac50 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
1ac60 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30  by P3. .** P3==0
1ac70 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20   means the main 
1ac80 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20  database, P3==1 
1ac90 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
1aca0 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20  se used for .** 
1acb0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1acc0 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73  , and P3>1 means
1acd0 20 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73   used the corres
1ace0 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64  ponding attached
1acf0 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47  .** database.  G
1ad00 69 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73  ive the new curs
1ad10 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  or an identifier
1ad20 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a   of P1.  The P1.
1ad30 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e  ** values need n
1ad40 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73  ot be contiguous
1ad50 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75   but all P1 valu
1ad60 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61  es should be sma
1ad70 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ll integers..** 
1ad80 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
1ad90 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61  or P1 to be nega
1ada0 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tive..**.** If P
1adb0 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68  5!=0 then use th
1adc0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
1add0 69 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20  ister P2 as the 
1ade0 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a  root page, not.*
1adf0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  * the value of P
1ae00 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20  2 itself..**.** 
1ae10 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20  There will be a 
1ae20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65  read lock on the
1ae30 20 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76   database whenev
1ae40 65 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a  er there is an.*
1ae50 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20  * open cursor.  
1ae60 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
1ae70 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69  was unlocked pri
1ae80 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72  or to this instr
1ae90 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61  uction.** then a
1aea0 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63   read lock is ac
1aeb0 71 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f  quired as part o
1aec0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
1aed0 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c  on.  A read.** l
1aee0 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72  ock allows other
1aef0 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65   processes to re
1af00 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ad the database 
1af10 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a  but prohibits.**
1af20 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65   any other proce
1af30 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e  ss from modifyin
1af40 67 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  g the database. 
1af50 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69   The read lock i
1af60 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68  s.** released wh
1af70 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61  en all cursors a
1af80 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74  re closed.  If t
1af90 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1afa0 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67  attempts.** to g
1afb0 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62  et a read lock b
1afc0 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63  ut fails, the sc
1afd0 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20  ript terminates 
1afe0 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54  with an.** SQLIT
1aff0 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64  E_BUSY error cod
1b000 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  e..**.** The P4 
1b010 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1b020 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1b030 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1b040 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1b050 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1b060 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1b070 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1b080 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1b090 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68  ** structure, th
1b0a0 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72  en said structur
1b0b0 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  e defines the co
1b0c0 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1b0d0 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1b0e0 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65   of the index be
1b0f0 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65  ing opened. Othe
1b100 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1b110 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1b120 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20  alue, it is set 
1b130 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
1b140 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
1b150 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  table..**.** See
1b160 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65   also: OpenWrite
1b170 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f  , ReopenIdx.*/./
1b180 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e  * Opcode: Reopen
1b190 49 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20  Idx P1 P2 P3 P4 
1b1a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b1b0 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1b1c0 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1b1d0 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  dx opcode works 
1b1e0 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61  exactly like Rea
1b1f0 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61  dOpen except tha
1b200 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68  t it first.** ch
1b210 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
1b220 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20  he cursor on P1 
1b230 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  is already open 
1b240 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65  with a root page
1b250 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32  .** number of P2
1b260 20 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68   and if it is th
1b270 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65  is opcode become
1b280 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f  s a no-op.  In o
1b290 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69  ther words,.** i
1b2a0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1b2b0 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f  already open, do
1b2c0 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a   not reopen it..
1b2d0 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e  **.** The Reopen
1b2e0 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f  Idx opcode may o
1b2f0 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68  nly be used with
1b300 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20   P5==0 and with 
1b310 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34  P4 being.** a P4
1b320 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e  _KEYINFO object.
1b330 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74    Furthermore, t
1b340 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74  he P3 value must
1b350 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a   be the same as.
1b360 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52  ** every other R
1b370 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e  eopenIdx or Open
1b380 52 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d  Read for the sam
1b390 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  e cursor number.
1b3a0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f  .**.** See the O
1b3b0 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64  penRead opcode d
1b3c0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
1b3d0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
1b3e0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
1b3f0 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65  pcode: OpenWrite
1b400 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1b410 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1b420 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1b430 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72  * Open a read/wr
1b440 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64  ite cursor named
1b450 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65   P1 on the table
1b460 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
1b470 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20  root.** page is 
1b480 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30  P2.  Or if P5!=0
1b490 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74   use the content
1b4a0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20   of register P2 
1b4b0 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72  to find the.** r
1b4c0 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  oot page..**.** 
1b4d0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1b4e0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1b4f0 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1b500 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1b510 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1b520 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1b530 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1b540 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1b550 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74  yInfo .** struct
1b560 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73  ure, then said s
1b570 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73  tructure defines
1b580 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
1b590 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
1b5a0 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69  equence of the i
1b5b0 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65  ndex being opene
1b5c0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  d. Otherwise, if
1b5d0 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
1b5e0 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20  r .** value, it 
1b5f0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
1b600 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1b610 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72  in the table, or
1b620 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65   to the.** large
1b630 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20  st index of any 
1b640 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61  column of the ta
1b650 62 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75  ble that is actu
1b660 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a  ally used..**.**
1b670 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1b680 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  n works just lik
1b690 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  e OpenRead excep
1b6a0 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20  t that it opens 
1b6b0 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e  the cursor.** in
1b6c0 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65   read/write mode
1b6d0 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74  .  For a given t
1b6e0 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20  able, there can 
1b6f0 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72  be one or more r
1b700 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73  ead-only.** curs
1b710 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ors or a single 
1b720 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f  read/write curso
1b730 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a  r but not both..
1b740 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f  **.** See also O
1b750 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65  penRead..*/.case
1b760 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b   OP_ReopenIdx: {
1b770 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1b780 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1b790 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
1b7a0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
1b7b0 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
1b7c0 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
1b7d0 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
1b7e0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  b;..  assert( pO
1b7f0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1b800 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b  >p5==OPFLAG_SEEK
1b810 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EQ );.  assert( 
1b820 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1b830 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75  KEYINFO );.  pCu
1b840 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
1b850 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p1];.  if( pCu
1b860 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52  r && pCur->pgnoR
1b870 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70  oot==(u32)pOp->p
1b880 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  2 ){.    assert(
1b890 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d   pCur->iDb==pOp-
1b8a0 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47  >p3 );      /* G
1b8b0 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65  uaranteed by the
1b8c0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1b8d0 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  */.    goto open
1b8e0 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1b8f0 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74  s;.  }.  /* If t
1b900 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74  he cursor is not
1b910 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
1b920 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20  or is open on a 
1b930 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69  different.  ** i
1b940 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20  ndex, then fall 
1b950 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
1b960 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63  OpenRead to forc
1b970 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61  e a reopen */.ca
1b980 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a  se OP_OpenRead:.
1b990 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74  case OP_OpenWrit
1b9a0 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e:..  assert( pO
1b9b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1b9c0 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
1b9d0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1b9e0 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1b9f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1ba00 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
1ba10 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1ba20 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20  de==OP_OpenRead 
1ba30 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1ba40 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20  OP_ReopenIdx.   
1ba50 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61         || p->rea
1ba60 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1ba70 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b  f( p->expired ){
1ba80 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1ba90 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b  _ABORT_ROLLBACK;
1baa0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
1bab0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1bac0 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b  }..  nField = 0;
1bad0 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b  .  pKeyInfo = 0;
1bae0 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
1baf0 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33  .  iDb = pOp->p3
1bb00 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1bb10 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1bb20 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1bb30 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1bb40 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
1bb50 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
1bb60 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44  [iDb];.  pX = pD
1bb70 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74  b->pBt;.  assert
1bb80 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pX!=0 );.  if(
1bb90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1bba0 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20  _OpenWrite ){.  
1bbb0 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1bbc0 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45  _FORDELETE==BTRE
1bbd0 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20  E_FORDELETE );. 
1bbe0 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45     wrFlag = BTRE
1bbf0 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e  E_WRCSR | (pOp->
1bc00 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44  p5 & OPFLAG_FORD
1bc10 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65  ELETE);.    asse
1bc20 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1bc30 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
1bc40 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
1bc50 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  ( pDb->pSchema->
1bc60 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d  file_format < p-
1bc70 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1bc80 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  mat ){.      p->
1bc90 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1bca0 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d  at = pDb->pSchem
1bcb0 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a  a->file_format;.
1bcc0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1bcd0 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20     wrFlag = 0;. 
1bce0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35   }.  if( pOp->p5
1bcf0 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45   & OPFLAG_P2ISRE
1bd00 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  G ){.    assert(
1bd10 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73   p2>0 );.    ass
1bd20 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65  ert( p2<=(p->nMe
1bd30 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
1bd40 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  ) );.    pIn2 = 
1bd50 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
1bd60 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1bd70 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
1bd80 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
1bd90 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1bda0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1bdb0 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1bdc0 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
1bdd0 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
1bde0 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
1bdf0 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
1be00 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
1be10 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f  OP_CreateTable o
1be20 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
1be30 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
1be40 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
1be50 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
1be60 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
1be70 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
1be80 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
1be90 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
1bea0 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
1beb0 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
1bec0 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
1bed0 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
1bee0 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73  ction. */.    as
1bef0 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20  sert( p2>=2 );. 
1bf00 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
1bf10 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1bf20 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
1bf30 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1bf40 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nfo;.    assert(
1bf50 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1bf60 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61  ENC(db) );.    a
1bf70 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1bf80 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e  >db==db );.    n
1bf90 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f  Field = pKeyInfo
1bfa0 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66  ->nField+pKeyInf
1bfb0 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65  o->nXField;.  }e
1bfc0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  lse if( pOp->p4t
1bfd0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b  ype==P4_INT32 ){
1bfe0 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
1bff0 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61  p->p4.i;.  }.  a
1c000 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c010 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  0 );.  assert( n
1c020 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65  Field>=0 );.  te
1c030 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d  stcase( nField==
1c040 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77  0 );  /* Table w
1c050 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d  ith INTEGER PRIM
1c060 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68  ARY KEY and noth
1c070 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43  ing else */.  pC
1c080 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
1c090 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1c0a0 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52  nField, iDb, CUR
1c0b0 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69  TYPE_BTREE);.  i
1c0c0 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74  f( pCur==0 ) got
1c0d0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72  o no_mem;.  pCur
1c0e0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1c0f0 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64   pCur->isOrdered
1c100 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67   = 1;.  pCur->pg
1c110 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66  noRoot = p2;.#if
1c120 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1c130 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20  .  pCur->wrFlag 
1c140 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66  = wrFlag;.#endif
1c150 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1c160 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70  treeCursor(pX, p
1c170 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49  2, wrFlag, pKeyI
1c180 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43  nfo, pCur->uc.pC
1c190 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e  ursor);.  pCur->
1c1a0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1c1b0 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68  nfo;.  /* Set th
1c1c0 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54  e VdbeCursor.isT
1c1d0 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50  able variable. P
1c1e0 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
1c1f0 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20   of.  ** SQLite 
1c200 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66  used to check if
1c210 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66   the root-page f
1c220 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61  lags were sane a
1c230 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a  t this point.  *
1c240 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74  * and report dat
1c250 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
1c260 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f   if they were no
1c270 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63  t, but this chec
1c280 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65  k has.  ** since
1c290 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
1c2a0 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f  btree layer.  */
1c2b0 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62    .  pCur->isTab
1c2c0 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65  le = pOp->p4type
1c2d0 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f  !=P4_KEYINFO;..o
1c2e0 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68  pen_cursor_set_h
1c2f0 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20  ints:.  assert( 
1c300 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d  OPFLAG_BULKCSR==
1c310 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29  BTREE_BULKLOAD )
1c320 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
1c330 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45  AG_SEEKEQ==BTREE
1c340 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65  _SEEK_EQ );.  te
1c350 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20  stcase( pOp->p5 
1c360 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  & OPFLAG_BULKCSR
1c370 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
1c380 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
1c390 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65  HINTS.  testcase
1c3a0 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
1c3b0 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e  AG_SEEKEQ );.#en
1c3c0 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72  dif.  sqlite3Btr
1c3d0 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67  eeCursorHintFlag
1c3e0 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  s(pCur->uc.pCurs
1c3f0 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  or,.            
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f     (pOp->p5 & (O
1c420 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50  PFLAG_BULKCSR|OP
1c430 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a  FLAG_SEEKEQ)));.
1c440 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1c450 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1c460 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1c470 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1c480 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1c490 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1c4a0 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1c4b0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1c4c0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1c4d0 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1c4e0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1c4f0 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1c500 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1c510 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1c520 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1c530 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1c540 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1c550 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1c560 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1c570 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1c580 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
1c590 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1c5a0 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
1c5b0 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
1c5c0 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
1c5d0 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
1c5e0 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
1c5f0 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
1c600 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
1c610 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
1c620 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
1c630 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
1c640 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
1c650 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
1c660 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
1c670 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
1c680 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1c690 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1c6a0 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1c6b0 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1c6c0 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1c6d0 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1c6e0 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1c6f0 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1c700 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1c710 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1c720 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1c730 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1c740 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1c750 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1c760 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1c770 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
1c780 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1c790 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
1c7a0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1c7b0 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1c7c0 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1c7d0 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1c7e0 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1c7f0 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1c800 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1c810 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1c820 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1c830 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1c840 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1c850 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1c860 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1c870 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1c880 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1c890 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1c8a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c8b0 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
1c8c0 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
1c8d0 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
1c8e0 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
1c8f0 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1c900 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
1c910 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
1c920 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1c930 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
1c940 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1c950 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
1c960 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1c970 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
1c980 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c990 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1c9a0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1c9b0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1c9c0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1c9d0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1c9e0 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1c9f0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1ca00 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1ca10 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  pCx->nullRow = 1
1ca20 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d  ;.  pCx->isEphem
1ca30 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d  eral = 1;.  rc =
1ca40 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
1ca50 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64  n(db->pVfs, 0, d
1ca60 62 2c 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20  b, &pCx->pBt, . 
1ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca80 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
1ca90 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
1caa0 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
1cab0 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
1cac0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1cad0 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
1cae0 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1caf0 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20  Trans(pCx->pBt, 
1cb00 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
1cb10 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1cb20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
1cb30 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
1cb40 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
1cb50 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
1cb60 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
1cb70 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
1cb80 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f  th the BTREE_BLO
1cb90 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65  BKEY flag before
1cba0 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
1cbb0 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
1cbc0 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
1cbd0 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
1cbe0 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
1cbf0 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1cc00 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
1cc10 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f  page 1 (an BLOB_
1cc20 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20  INTKEY table).. 
1cc30 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70     */.    if( (p
1cc40 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1cc50 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29  4.pKeyInfo)!=0 )
1cc60 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
1cc70 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1cc80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1cc90 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
1cca0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ccb0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
1ccc0 78 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42  x->pBt, &pgno, B
1ccd0 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70  TREE_BLOBKEY | p
1cce0 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20  Op->p5); .      
1ccf0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1cd00 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
1cd10 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
1cd20 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
1cd30 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1cd40 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1cd50 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1cd60 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1cd70 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20  NC(db) );.      
1cd80 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
1cd90 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  = pKeyInfo;.    
1cda0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1cdb0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1cdc0 3e 70 42 74 2c 20 70 67 6e 6f 2c 20 42 54 52 45  >pBt, pgno, BTRE
1cdd0 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20  E_WRCSR,.       
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdf0 20 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66           pKeyInf
1ce00 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  o, pCx->uc.pCurs
1ce10 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1ce20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1ce30 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
1ce40 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1ce50 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1ce60 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
1ce70 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1ce80 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cea0 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  0, pCx->uc.pCurs
1ceb0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1cec0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1ced0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
1cee0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1cef0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78  _to_error;.  pCx
1cf00 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1cf10 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1cf20 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61  ORDERED);.  brea
1cf30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1cf40 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50   SorterOpen P1 P
1cf50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1cf60 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1cf70 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70  s like OP_OpenEp
1cf80 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74  hemeral except t
1cf90 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20  hat it opens.** 
1cfa0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1cfb0 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66  x that is specif
1cfc0 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20  ically designed 
1cfd0 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a  to sort large.**
1cfe0 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e   tables using an
1cff0 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d   external merge-
1d000 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  sort algorithm..
1d010 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e  **.** If argumen
1d020 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  t P3 is non-zero
1d030 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61  , then it indica
1d040 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72  tes that the sor
1d050 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d  ter may.** assum
1d060 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20  e that a stable 
1d070 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67  sort considering
1d080 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69   the first P3 fi
1d090 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20  elds of each.** 
1d0a0 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e  key is sufficien
1d0b0 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65  t to produce the
1d0c0 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74   required result
1d0d0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1d0e0 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1d0f0 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1d100 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d110 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1d120 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1d130 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1d140 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1d150 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1d160 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b  CURTYPE_SORTER);
1d170 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1d180 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1d190 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1d1a0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1d1b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1d1c0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1d1d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d1e0 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1d1f0 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72  ==ENC(db) );.  r
1d200 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
1d210 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f  orterInit(db, pO
1d220 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69  p->p3, pCx);.  i
1d230 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1d240 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1d250 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1d260 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1d270 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Test P1 P2 * * *
1d280 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
1d290 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ( cursor[P1].ctr
1d2a0 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a  ++ ) pc = P2.**.
1d2b0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
1d2c0 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65  r cursor. If the
1d2d0 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65   sequence counte
1d2e0 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
1d2f0 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  ero, jump.** to 
1d300 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  P2. Regardless o
1d310 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
1d320 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
1d330 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  en, increment th
1d340 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63  e.** the sequenc
1d350 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  e value..*/.case
1d360 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74   OP_SequenceTest
1d370 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1d380 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1d390 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1d3a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1d3b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1d3c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1d3d0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
1d3e0 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70  (pC) );.  if( (p
1d3f0 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d  C->seqCount++)==
1d400 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
1d410 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
1d420 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d430 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1d440 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1d450 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c  Synopsis: P3 col
1d460 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a  umns in r[P2].**
1d470 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1d480 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1d490 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1d4a0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1d4b0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1d4c0 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1d4d0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1d4e0 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e  e row is the con
1d4f0 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1d500 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1d510 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1d520 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1d530 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1d540 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1d550 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1d560 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1d570 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1d580 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1d590 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1d5a0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1d5b0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1d5c0 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1d5d0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1d5e0 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1d5f0 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1d600 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1d610 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1d620 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1d630 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1d640 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1d650 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1d660 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1d670 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1d680 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1d690 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1d6a0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1d6b0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1d6c0 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1d6d0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1d6e0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1d6f0 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1d700 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1d710 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1d720 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d730 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p3>=0 );.  pCx 
1d740 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d750 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1d760 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p3, -1, CURTYP
1d770 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28  E_PSEUDO);.  if(
1d780 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1d790 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1d7a0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1d7b0 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65  ->uc.pseudoTable
1d7c0 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1d7d0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1d7e0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
1d7f0 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65  ->p5==0 );.  bre
1d800 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1d810 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
1d820 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
1d830 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
1d840 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
1d850 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
1d860 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
1d870 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1d880 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
1d890 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
1d8a0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
1d8b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1d8c0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1d8d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
1d8e0 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1d8f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
1d900 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
1d910 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
1d920 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
1d930 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1d940 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70  _USED_MASK./* Op
1d950 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65  code: ColumnsUse
1d960 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  d P1 * * P4 *.**
1d970 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1d980 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73  (which only exis
1d990 74 73 20 69 66 20 53 51 4c 69 74 65 20 77 61 73  ts if SQLite was
1d9a0 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a   compiled with.*
1d9b0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1d9c0 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1d9d0 29 20 69 64 65 6e 74 69 66 69 65 73 20 77 68 69  ) identifies whi
1d9e0 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  ch columns of th
1d9f0 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  e.** table or in
1da00 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50  dex for cursor P
1da10 31 20 61 72 65 20 75 73 65 64 2e 20 20 50 34 20  1 are used.  P4 
1da20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  is a 64-bit inte
1da30 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34  ger.** (P4_INT64
1da40 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 66  ) in which the f
1da50 69 72 73 74 20 36 33 20 62 69 74 73 20 61 72 65  irst 63 bits are
1da60 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66   one for each of
1da70 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33   the.** first 63
1da80 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
1da90 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74  table or index t
1daa0 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79  hat are actually
1dab0 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1dac0 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67  cursor.  The hig
1dad0 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73 20 73  h-order bit is s
1dae0 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  et if any column
1daf0 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34   after.** the 64
1db00 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63  th is used..*/.c
1db10 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73  ase OP_ColumnsUs
1db20 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ed: {.  VdbeCurs
1db30 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70  or *pC;.  pC = p
1db40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1db50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1db60 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1db70 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 2d  E_BTREE );.  pC-
1db80 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36  >maskUsed = *(u6
1db90 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  4*)pOp->p4.pI64;
1dba0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
1dbb0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
1dbc0 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50  eekGE P1 P2 P3 P
1dbd0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1dbe0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1dbf0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1dc00 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1dc10 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1dc20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1dc30 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1dc40 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1dc50 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1dc60 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1dc70 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1dc80 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1dc90 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1dca0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1dcb0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1dcc0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1dcd0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1dce0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1dcf0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1dd00 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1dd10 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1dd20 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1dd30 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1dd40 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1dd50 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1dd60 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1dd70 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1dd80 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1dd90 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1dda0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1ddb0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1ddc0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
1ddd0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
1dde0 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
1ddf0 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
1de00 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
1de10 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
1de20 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
1de30 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
1de40 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
1de50 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
1de60 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1de70 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
1de80 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
1de90 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
1dea0 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
1deb0 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
1dec0 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  n IdxLE opcode w
1ded0 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
1dee0 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
1def0 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxLE opcode will
1df00 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
1df10 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
1df20 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
1df30 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxLE opcode wil
1df40 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
1df50 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
1df60 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  rations..**.** T
1df70 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1df80 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1df90 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1dfa0 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1dfb0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1dfc0 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1dfd0 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1dfe0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1dff0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1e000 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1e010 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1e020 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e030 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e040 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
1e050 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1e060 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50  : SeekGT P1 P2 P
1e070 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e080 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e090 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1e0a0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1e0b0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1e0c0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1e0d0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1e0e0 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1e0f0 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1e100 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1e110 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1e120 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1e130 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1e140 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1e150 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e160 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1e170 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1e180 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1e190 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1e1a0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1e1b0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1e1c0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1e1d0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1e1e0 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
1e1f0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1e200 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1e210 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
1e220 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1e230 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1e240 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1e250 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1e260 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1e270 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1e280 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1e290 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1e2a0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1e2b0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1e2c0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1e2d0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1e2e0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1e2f0 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1e300 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1e310 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1e320 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1e330 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1e340 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20   Opcode: SeekLT 
1e350 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
1e360 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e370 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1e380 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e390 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1e3a0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1e3b0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1e3c0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1e3d0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1e3e0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1e3f0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e400 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1e410 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1e420 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e430 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1e440 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1e450 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1e460 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1e470 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1e480 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1e490 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1e4a0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1e4b0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1e4c0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1e4d0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1e4e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1e4f0 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1e500 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1e510 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1e520 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e530 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1e540 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1e550 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1e560 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1e570 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1e580 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1e590 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1e5a0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e5b0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1e5c0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1e5d0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1e5e0 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1e5f0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1e600 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1e610 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1e620 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45  * Opcode: SeekLE
1e630 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1e640 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e650 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1e660 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e670 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1e680 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1e690 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1e6a0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1e6b0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1e6c0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1e6d0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e6e0 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1e6f0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1e700 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1e710 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1e720 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1e730 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1e740 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1e750 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1e760 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1e770 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1e780 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1e790 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1e7a0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1e7b0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1e7c0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1e7d0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1e7e0 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1e7f0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1e800 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1e810 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1e820 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1e830 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1e840 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1e850 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1e860 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1e870 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1e880 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1e890 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1e8a0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1e8b0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1e8c0 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1e8d0 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1e8e0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50   If the cursor P
1e8f0 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69  1 was opened usi
1e900 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45  ng the OPFLAG_SE
1e910 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20  EKEQ flag, then 
1e920 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77  this.** opcode w
1e930 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20  ill always land 
1e940 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  on a record that
1e950 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20   equally equals 
1e960 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65  the key, or.** e
1e970 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  lse jump immedia
1e980 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65  tely to P2.  Whe
1e990 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1e9a0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74  OPFLAG_SEEKEQ, t
1e9b0 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75  his.** opcode mu
1e9c0 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  st be followed b
1e9d0 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63 6f 64  y an IdxGE opcod
1e9e0 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
1e9f0 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68  arguments..** Th
1ea00 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  e IdxGE opcode w
1ea10 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69  ill be skipped i
1ea20 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75  f this opcode su
1ea30 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a  cceeds, but the.
1ea40 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  ** IdxGE opcode 
1ea50 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20  will be used on 
1ea60 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20  subsequent loop 
1ea70 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  iterations..**.*
1ea80 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1ea90 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1eaa0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1eab0 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1eac0 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f  eekLT:         /
1ead0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1eae0 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20  ase OP_SeekLE:  
1eaf0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1eb00 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1eb10 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
1eb20 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1eb30 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b  ase OP_SeekGT: {
1eb40 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1eb50 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1eb60 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
1eb70 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
1eb80 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20   */.  int oc;   
1eb90 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1eba0 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  de */.  VdbeCurs
1ebb0 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
1ebc0 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b  e cursor to seek
1ebd0 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65   */.  UnpackedRe
1ebe0 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20  cord r;  /* The 
1ebf0 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20  key to seek for 
1ec00 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
1ec10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ec20 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20  r of columns or 
1ec30 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65  fields in the ke
1ec40 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  y */.  i64 iKey;
1ec50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1ec60 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
1ec70 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e   seek to */.  in
1ec80 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20  t eqOnly;       
1ec90 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73   /* Only interes
1eca0 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74  ted in == result
1ecb0 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  s */..  assert( 
1ecc0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1ecd0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1ece0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1ecf0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1ed00 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1ed10 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1ed20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1ed30 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
1ed40 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
1ed50 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1ed60 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1ed70 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1ed80 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1ed90 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1eda0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1edb0 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1edc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1edd0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1ede0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
1edf0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1ee00 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1ee10 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a  ;.  eqOnly = 0;.
1ee20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1ee30 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0;.#ifdef SQLITE
1ee40 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
1ee50 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
1ee60 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  e;.#endif..  if(
1ee70 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1ee80 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45      /* The BTREE
1ee90 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73  _SEEK_EQ flag is
1eea0 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64   only set on ind
1eeb0 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  ex cursors */.  
1eec0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1eed0 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
1eee0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
1eef0 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
1ef00 51 29 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 2f 2a  Q)==0 );..    /*
1ef10 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1ef20 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1ef30 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1ef40 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1ef50 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1ef60 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1ef70 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1ef80 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1ef90 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1efa0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1efb0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
1efc0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1efd0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
1efe0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
1eff0 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
1f000 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
1f010 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
1f020 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1f030 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
1f040 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
1f050 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1f060 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
1f070 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1f080 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1f090 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1f0a0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1f0b0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
1f0c0 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
1f0d0 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
1f0e0 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
1f0f0 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
1f100 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1f110 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1f120 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1f130 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1f140 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
1f150 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1f160 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1f170 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1f180 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1f190 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1f1a0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1f1b0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1f1c0 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1f1d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1f1e0 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70  (1,2); goto jump
1f1f0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
1f200 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a  break;.      }..
1f210 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1f220 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1f230 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  ey is larger tha
1f240 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1f250 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1f260 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1f270 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20  te >= for > and 
1f280 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69  < for <=. e.g. i
1f290 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72  f the search ter
1f2a0 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e  m.      ** is 4.
1f2b0 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  9 and the intege
1f2c0 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  r approximation 
1f2d0 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  5:.      **.    
1f2e0 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e    **        (x >
1f2f0 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20    4.9)    ->    
1f300 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20   (x >= 5).      
1f310 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20  **        (x <= 
1f320 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1f330 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f  x <  5).      */
1f340 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d  .      if( pIn3-
1f350 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r<(double)iKe
1f360 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1f370 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d  ert( OP_SeekGE==
1f380 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b  (OP_SeekGT-1) );
1f390 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1f3a0 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f   OP_SeekLT==(OP_
1f3b0 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20  SeekLE-1) );.   
1f3c0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1f3d0 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31  _SeekLE & 0x0001
1f3e0 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1f3f0 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1f400 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1f410 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1f420 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d   & 0x0001) ) oc-
1f430 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
1f440 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1f450 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1f460 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74  s smaller than t
1f470 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1f480 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1f490 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1f4a0 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66  <= for < and > f
1f4b0 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20  or >=.  */.     
1f4c0 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e   else if( pIn3->
1f4d0 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r>(double)iKey
1f4e0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1f4f0 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28  rt( OP_SeekLE==(
1f500 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a  OP_SeekLT+1) );.
1f510 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1f520 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53  OP_SeekGT==(OP_S
1f530 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20  eekGE+1) );.    
1f540 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1f550 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
1f560 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30  ==(OP_SeekGE & 0
1f570 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1f580 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1f590 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20  01)==(OP_SeekLT 
1f5a0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b  & 0x0001) ) oc++
1f5b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
1f5c0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1f5d0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1f5e0 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
1f5f0 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1f600 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1f610 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1f620 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
1f630 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
1f640 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  */.    if( rc!=S
1f650 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1f660 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1f670 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1f680 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1f690 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69   For a cursor wi
1f6a0 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45  th the BTREE_SEE
1f6b0 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20  K_EQ hint, only 
1f6c0 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e  the OP_SeekGE an
1f6d0 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b  d.    ** OP_Seek
1f6e0 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61  LE opcodes are a
1f6f0 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73  llowed, and thes
1f700 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69  e must be immedi
1f710 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20  ately followed. 
1f720 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49     ** by an OP_I
1f730 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54  dxGT or OP_IdxLT
1f740 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74   opcode, respect
1f750 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20  ively, with the 
1f760 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f  same key..    */
1f770 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
1f780 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69  BtreeCursorHasHi
1f790 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  nt(pC->uc.pCurso
1f7a0 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  r, BTREE_SEEK_EQ
1f7b0 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c  ) ){.      eqOnl
1f7c0 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  y = 1;.      ass
1f7d0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1f7e0 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70  ==OP_SeekGE || p
1f7f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
1f800 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  eekLE );.      a
1f810 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
1f820 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
1f830 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
1f840 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
1f850 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1f860 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20  ].p1==pOp[0].p1 
1f870 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1f880 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b   pOp[1].p2==pOp[
1f890 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61  0].p2 );.      a
1f8a0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33  ssert( pOp[1].p3
1f8b0 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20  ==pOp[0].p3 );. 
1f8c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f8d0 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d  [1].p4.i==pOp[0]
1f8e0 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a  .p4.i );.    }..
1f8f0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1f900 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65  ->p4.i;.    asse
1f910 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1f920 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
1f930 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1f940 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 );.    r.pKeyI
1f950 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1f960 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1f970 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
1f980 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1f990 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
1f9a0 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
1f9b0 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
1f9c0 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
1f9d0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63  =OP_SeekGT || oc
1f9e0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20  ==OP_SeekLE ){. 
1f9f0 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1fa00 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20  ult_rc = -1;.   
1fa10 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
1fa20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
1fa30 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a  t_rc = +1;.    *
1fa40 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
1fa50 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1fa60 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53  ((1 & (oc - OP_S
1fa70 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b  eekLT)) ? -1 : +
1fa80 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
1fa90 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc!=OP_SeekGT ||
1faa0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
1fab0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1fac0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c   oc!=OP_SeekLE |
1fad0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1fae0 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1faf0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc!=OP_SeekGE 
1fb00 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1fb10 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =+1 );.    asser
1fb20 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
1fb30 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1fb40 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61  ==+1 );..    r.a
1fb50 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
1fb60 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
1fb70 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1fb80 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1fb90 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1fba0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1fbb0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1fbc0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
1fbd0 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65  ExpandBlob(r.aMe
1fbe0 6d 29 3b 0a 20 20 20 20 72 2e 65 71 53 65 65 6e  m);.    r.eqSeen
1fbf0 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73   = 0;.    rc = s
1fc00 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1fc10 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
1fc20 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  .pCursor, &r, 0,
1fc30 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1fc40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1fc50 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1fc60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fc70 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
1fc80 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53   eqOnly && r.eqS
1fc90 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  een==0 ){.      
1fca0 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29  assert( res!=0 )
1fcb0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65  ;.      goto see
1fcc0 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  k_not_found;.   
1fcd0 20 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66   }.  }.  pC->def
1fce0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1fcf0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1fd00 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1fd10 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1fd20 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
1fd30 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1fd40 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
1fd50 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
1fd60 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1fd70 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
1fd80 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
1fd90 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
1fda0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
1fdb0 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1fdc0 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1fdd0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1fde0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
1fdf0 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66   &res);.      if
1fe00 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1fe10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1fe20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1fe30 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20  else{.      res 
1fe40 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  = 0;.    }.  }el
1fe50 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
1fe60 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc==OP_SeekLT ||
1fe70 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
1fe80 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20  ;.    if( res>0 
1fe90 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
1fea0 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a  ==OP_SeekLT) ){.
1feb0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
1fec0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1fed0 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70  3BtreePrevious(p
1fee0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
1fef0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
1ff00 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
1ff10 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ff20 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
1ff30 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73  se{.      /* res
1ff40 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69   might be negati
1ff50 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74  ve because the t
1ff60 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20  able is empty.  
1ff70 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a  Check to.      *
1ff80 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73  * see if this is
1ff90 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20   the case..     
1ffa0 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20   */.      res = 
1ffb0 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28  sqlite3BtreeEof(
1ffc0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
1ffd0 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f  .    }.  }.seek_
1ffe0 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73  not_found:.  ass
1fff0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
20000 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
20010 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
20020 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
20030 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
20040 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f  .  }else if( eqO
20050 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72  nly ){.    asser
20060 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
20070 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
20080 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
20090 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70  IdxGT );.    pOp
200a0 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20  ++; /* Skip the 
200b0 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49  OP_IdxLt or OP_I
200c0 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77  dxGT that follow
200d0 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b  s */.  }.  break
200e0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
200f0 43 6d 70 54 65 73 74 20 50 31 20 50 32 20 50 33  CmpTest P1 P2 P3
20100 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73   * *.**.** P2 is
20110 20 61 20 6a 75 6d 70 20 64 65 73 74 69 6e 61 74   a jump destinat
20120 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 31  ion. Register P1
20130 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
20140 6f 20 63 6f 6e 74 61 69 6e 20 65 69 74 68 65 72  o contain either
20150 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 76  .** an integer v
20160 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 20  alue or a NULL. 
20170 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  The jump is take
20180 6e 20 69 66 20 50 31 20 63 6f 6e 74 61 69 6e 73  n if P1 contains
20190 20 61 6e 79 20 76 61 6c 75 65 0a 2a 2a 20 6f 74   any value.** ot
201a0 68 65 72 20 74 68 61 6e 20 30 20 28 69 2e 65 2e  her than 0 (i.e.
201b0 20 4e 55 4c 4c 20 64 6f 65 73 20 63 61 75 73 65   NULL does cause
201c0 20 61 20 6a 75 6d 70 29 2e 0a 2a 2a 20 0a 2a 2a   a jump)..** .**
201d0 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 4e 55   If P1 is not NU
201e0 4c 4c 2c 20 69 74 73 20 76 61 6c 75 65 20 69 73  LL, its value is
201f0 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 69 6e 74   modified to int
20200 65 67 65 72 20 76 61 6c 75 65 20 30 20 6f 72 20  eger value 0 or 
20210 31 20 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 20  1 .** according 
20220 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
20230 74 68 65 20 50 33 20 6f 70 65 72 61 6e 64 3a 0a  the P3 operand:.
20240 2a 2a 0a 2a 2a 20 20 20 50 33 20 20 20 20 20 20  **.**   P3      
20250 20 20 20 20 20 20 6d 6f 64 69 66 69 63 61 74 69        modificati
20260 6f 6e 0a 2a 2a 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  on.**   --------
20270 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20280 2d 2d 0a 2a 2a 20 20 20 4f 50 5f 4c 74 20 20 20  --.**   OP_Lt   
20290 20 20 20 20 20 20 28 50 31 20 3d 20 28 50 31 20        (P1 = (P1 
202a0 3c 20 30 29 29 0a 2a 2a 20 20 20 4f 50 5f 4c 65  < 0)).**   OP_Le
202b0 20 20 20 20 20 20 20 20 20 28 50 31 20 3d 20 28           (P1 = (
202c0 50 31 20 3c 3d 20 30 29 29 0a 2a 2a 20 20 20 4f  P1 <= 0)).**   O
202d0 50 5f 47 74 20 20 20 20 20 20 20 20 20 28 50 31  P_Gt         (P1
202e0 20 3d 20 28 50 31 20 3e 20 30 29 29 0a 2a 2a 20   = (P1 > 0)).** 
202f0 20 20 4f 50 5f 47 65 20 20 20 20 20 20 20 20 20    OP_Ge         
20300 28 50 31 20 3d 20 28 50 31 20 3e 3d 20 30 29 29  (P1 = (P1 >= 0))
20310 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6d 70 54  .*/.case OP_CmpT
20320 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  est: {          
20330 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75        /* in1, ju
20340 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 62 4a 75 6d  mp */.  int bJum
20350 70 3b 0a 20 20 0a 20 20 70 49 6e 31 20 3d 20 26  p;.  .  pIn1 = &
20360 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
20370 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
20380 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 7b 0a  s & MEM_Int) ){.
20390 20 20 20 20 62 4a 75 6d 70 20 3d 20 28 70 49 6e      bJump = (pIn
203a0 31 2d 3e 75 2e 69 21 3d 30 29 3b 0a 20 20 20 20  1->u.i!=0);.    
203b0 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 70 33 20  switch( pOp->p3 
203c0 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
203d0 5f 4c 74 3a 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  _Lt: pIn1->u.i =
203e0 20 28 70 49 6e 31 2d 3e 75 2e 69 20 3c 20 30 29   (pIn1->u.i < 0)
203f0 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63  ; break;.      c
20400 61 73 65 20 4f 50 5f 4c 65 3a 20 70 49 6e 31 2d  ase OP_Le: pIn1-
20410 3e 75 2e 69 20 3d 20 28 70 49 6e 31 2d 3e 75 2e  >u.i = (pIn1->u.
20420 69 20 3c 3d 20 30 29 3b 20 62 72 65 61 6b 3b 0a  i <= 0); break;.
20430 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74        case OP_Gt
20440 3a 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 70  : pIn1->u.i = (p
20450 49 6e 31 2d 3e 75 2e 69 20 3e 20 30 29 3b 20 62  In1->u.i > 0); b
20460 72 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61  reak;.      defa
20470 75 6c 74 3a 20 61 73 73 65 72 74 28 20 70 4f 70  ult: assert( pOp
20480 2d 3e 70 33 3d 3d 4f 50 5f 47 65 20 29 3b 20 70  ->p3==OP_Ge ); p
20490 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 70 49 6e 31  In1->u.i = (pIn1
204a0 2d 3e 75 2e 69 20 3e 3d 20 30 29 3b 20 62 72 65  ->u.i >= 0); bre
204b0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ak;.    }.  }els
204c0 65 7b 0a 20 20 20 20 62 4a 75 6d 70 20 3d 20 31  e{.    bJump = 1
204d0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 62 4a 75  ;.  }..  if( bJu
204e0 6d 70 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  mp ) goto jump_t
204f0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
20500 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
20510 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
20520 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
20530 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
20540 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
20550 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
20560 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
20570 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
20580 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
20590 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
205a0 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
205b0 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
205c0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
205d0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
205e0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
205f0 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
20600 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
20610 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
20620 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
20630 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
20640 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
20650 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
20660 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
20670 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
20680 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
20690 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
206a0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
206b0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
206c0 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
206d0 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64   it can be.** ad
206e0 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f  vanced in the fo
206f0 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e  rward direction.
20700 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72    The Next instr
20710 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b  uction will work
20720 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65  ,.** but not the
20730 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f   Prev instructio
20740 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
20750 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  o: NotFound, NoC
20760 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73  onflict, NotExis
20770 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a  ts. SeekGe.*/./*
20780 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
20790 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
207a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
207b0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
207c0 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
207d0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
207e0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
207f0 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
20800 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
20810 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
20820 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
20830 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
20840 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
20850 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
20860 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
20870 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
20880 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
20890 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
208a0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
208b0 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
208c0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
208d0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
208e0 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
208f0 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
20900 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
20910 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
20920 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
20930 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
20940 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
20950 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
20960 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
20970 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
20980 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
20990 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
209a0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
209b0 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
209c0 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
209d0 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
209e0 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
209f0 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
20a00 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
20a10 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
20a20 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
20a30 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
20a40 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
20a50 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
20a60 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
20a70 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  sts, NoConflict.
20a80 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
20a90 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
20aa0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
20ab0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
20ac0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
20ad0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
20ae0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
20af0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
20b00 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
20b10 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
20b20 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
20b30 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
20b40 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
20b50 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
20b60 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
20b70 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
20b80 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
20b90 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
20ba0 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
20bb0 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e  4.** contains an
20bc0 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75  y NULL value, ju
20bd0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20be0 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65  o P2.  If all te
20bf0 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  rms of the.** re
20c00 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c  cord are not-NUL
20c10 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69  L then a check i
20c20 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d  s done to determ
20c30 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69  ine if any row i
20c40 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65  n the.** P1 inde
20c50 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61  x btree has a ma
20c60 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69  tching key prefi
20c70 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
20c80 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d   no matches, jum
20c90 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  p.** immediately
20ca0 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72   to P2.  If ther
20cb0 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61  e is a match, fa
20cc0 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c  ll through and l
20cd0 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63  eave the P1.** c
20ce0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
20cf0 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72  o the matching r
20d00 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ow..**.** This o
20d10 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72  pcode is similar
20d20 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20   to OP_NotFound 
20d30 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
20d40 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ons that the.** 
20d50 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73  branch is always
20d60 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61   taken if any pa
20d70 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  rt of the search
20d80 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55   key input is NU
20d90 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  LL..**.** This o
20da0 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
20db0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20dc0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20dd0 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
20de0 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
20df0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
20e00 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
20e10 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
20e20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
20e30 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
20e40 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
20e50 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
20e60 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
20e70 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
20e80 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20  NoConflict:     
20e90 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
20ea0 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
20eb0 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
20ec0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
20ed0 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
20ee0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
20ef0 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
20f00 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a  sts;.  int takeJ
20f10 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20  ump;.  int ii;. 
20f20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20f30 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68  .  int res;.  ch
20f40 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  ar *pFree;.  Unp
20f50 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
20f60 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
20f70 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72  Record r;.  char
20f80 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38   aTempRec[ROUND8
20f90 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64  (sizeof(Unpacked
20fa0 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f  Record)) + sizeo
20fb0 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a  f(Mem)*4 + 7];..
20fc0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
20fd0 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ST.  if( pOp->op
20fe0 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code!=OP_NoConfl
20ff0 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f  ict ) sqlite3_fo
21000 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
21010 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70  dif..  assert( p
21020 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21030 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21040 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
21050 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
21060 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
21070 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21080 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21090 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
210a0 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
210b0 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
210c0 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33  e;.#endif.  pIn3
210d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
210e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
210f0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
21100 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
21110 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
21120 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
21130 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21140 3d 3d 30 20 29 3b 0a 20 20 70 46 72 65 65 20 3d  ==0 );.  pFree =
21150 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   0;.  if( pOp->p
21160 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
21170 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
21180 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
21190 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
211a0 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
211b0 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f  m = pIn3;.    fo
211c0 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69  r(ii=0; ii<r.nFi
211d0 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
211e0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
211f0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d  alid(&r.aMem[ii]
21200 29 20 29 3b 0a 20 20 20 20 20 20 45 78 70 61 6e  ) );.      Expan
21210 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69  dBlob(&r.aMem[ii
21220 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ]);.#ifdef SQLIT
21230 45 5f 44 45 42 55 47 0a 20 20 20 20 20 20 69 66  E_DEBUG.      if
21240 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f  ( ii ) REGISTER_
21250 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69  TRACE(pOp->p3+ii
21260 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a  , &r.aMem[ii]);.
21270 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 20  #endif.    }.   
21280 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20   pIdxKey = &r;. 
21290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64 78   }else{.    pIdx
212a0 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
212b0 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65  eAllocUnpackedRe
212c0 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70 43  cord(.        pC
212d0 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d  ->pKeyInfo, aTem
212e0 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54 65  pRec, sizeof(aTe
212f0 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a 20  mpRec), &pFree. 
21300 20 20 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49     );.    if( pI
21310 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20  dxKey==0 ) goto 
21320 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
21330 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
21340 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
21350 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
21360 33 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  3);.    sqlite3V
21370 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
21380 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
21390 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20  n3->n, pIn3->z, 
213a0 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20  pIdxKey);.  }.  
213b0 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74  pIdxKey->default
213c0 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a  _rc = 0;.  takeJ
213d0 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  ump = 0;.  if( p
213e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
213f0 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20  oConflict ){.   
21400 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e   /* For the OP_N
21410 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65  oConflict opcode
21420 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  , take the jump 
21430 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20  if any of the.  
21440 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64    ** input field
21450 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63  s are NULL, sinc
21460 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61  e any key with a
21470 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20   NULL will not. 
21480 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a     ** conflict *
21490 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  /.    for(ii=0; 
214a0 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65  ii<pIdxKey->nFie
214b0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
214c0 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d   if( pIdxKey->aM
214d0 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
214e0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
214f0 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b     takeJump = 1;
21500 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
21510 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
21520 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
21530 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
21540 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
21550 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
21560 30 2c 20 26 72 65 73 29 3b 0a 20 20 73 71 6c 69  0, &res);.  sqli
21570 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 46  te3DbFree(db, pF
21580 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ree);.  if( rc!=
21590 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
215a0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
215b0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
215c0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
215d0 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45   res;.  alreadyE
215e0 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
215f0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
21600 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74  = 1-alreadyExist
21610 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
21620 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
21630 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
21640 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
21650 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
21660 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
21670 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
21680 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d  (alreadyExists!=
21690 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c  0,2);.    if( al
216a0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f  readyExists ) go
216b0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
216c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
216d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65  BranchTaken(take
216e0 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69  Jump||alreadyExi
216f0 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts==0,2);.    i
21700 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21  f( takeJump || !
21710 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
21720 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
21730 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
21740 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
21750 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
21760 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
21770 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
21780 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
21790 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
217a0 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
217b0 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
217c0 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
217d0 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50  .  If register P
217e0 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  3 does not conta
217f0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  in an integer or
21800 20 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a   if P1 does not.
21810 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ** contain a rec
21820 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
21830 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
21840 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
21850 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73  .** Or, if P2 is
21860 20 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c   0, raise an SQL
21870 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f  ITE_CORRUPT erro
21880 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  r. If P1 does co
21890 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72  ntain.** a recor
218a0 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
218b0 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74  then .** leave t
218c0 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
218d0 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
218e0 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
218f0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
21900 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
21910 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45  *.** The OP_NotE
21920 78 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72  xists opcode per
21930 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
21940 70 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69  peration, but wi
21950 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a  th OP_NotExists.
21960 2a 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74  ** the P3 regist
21970 65 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61  er must be guara
21980 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  nteed to contain
21990 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
219a0 65 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a  e.  With this.**
219b0 20 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65   opcode, registe
219c0 72 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63  r P3 might not c
219d0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
219e0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  r..**.** The OP_
219f0 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
21a00 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
21a10 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
21a20 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
21a30 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
21a40 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
21a50 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
21a60 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
21a70 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
21a80 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
21a90 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
21aa0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
21ab0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
21ac0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
21ad0 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
21ae0 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
21af0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
21b00 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
21b10 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
21b20 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
21b30 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a  ict, SeekRowid.*
21b40 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
21b50 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
21b60 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
21b70 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
21b80 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
21b90 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
21ba0 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
21bb0 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
21bc0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
21bd0 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
21be0 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
21bf0 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
21c00 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
21c10 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
21c20 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
21c30 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20  ely to P2.  Or, 
21c40 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73  if P2 is 0, rais
21c50 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43  e an.** SQLITE_C
21c60 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66  ORRUPT error. If
21c70 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
21c80 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
21c90 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a  owid P3 then .**
21ca0 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f   leave the curso
21cb0 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  r pointing at th
21cc0 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61  at record and fa
21cd0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
21ce0 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
21cf0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
21d00 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70   OP_SeekRowid op
21d10 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
21d20 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
21d30 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73   but also allows
21d40 20 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73   the.** P3 regis
21d50 74 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ter to contain a
21d60 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c   non-integer val
21d70 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  ue, in which cas
21d80 65 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a  e the jump is.**
21d90 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20   always taken.  
21da0 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75  This opcode requ
21db0 69 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77  ires that P3 alw
21dc0 61 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ays contain an i
21dd0 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  nteger..**.** Th
21de0 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
21df0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
21e00 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
21e10 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
21e20 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
21e30 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
21e40 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
21e50 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
21e60 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
21e70 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
21e80 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
21e90 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
21ea0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
21eb0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
21ec0 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
21ed0 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
21ee0 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
21ef0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
21f00 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
21f10 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
21f20 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f  Conflict, SeekRo
21f30 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  wid.*/.case OP_S
21f40 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  eekRowid: {     
21f50 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
21f60 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
21f70 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
21f80 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
21f90 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
21fa0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
21fb0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
21fc0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
21fd0 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
21fe0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
21ff0 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In3, SQLITE_AFF_
22000 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
22010 67 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  g);.    if( (pIn
22020 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
22030 6e 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  nt)==0 ) goto ju
22040 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
22050 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
22060 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74  into OP_NotExist
22070 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  s */.case OP_Not
22080 45 78 69 73 74 73 3a 20 20 20 20 20 20 20 20 20  Exists:         
22090 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
220a0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
220b0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
220c0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
220d0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
220e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
220f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22100 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22110 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22120 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22130 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
22140 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
22150 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65  ->seekOp = 0;.#e
22160 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70  ndif.  assert( p
22170 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22180 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
22190 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
221a0 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
221b0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
221c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
221d0 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  !=0 );.  res = 0
221e0 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d  ;.  iKey = pIn3-
221f0 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >u.i;.  rc = sql
22200 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
22210 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
22220 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
22230 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
22240 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
22250 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76  ==0 );.  pC->mov
22260 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
22270 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
22280 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d  _Delete */.  pC-
22290 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
222a0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
222b0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
222c0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
222d0 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  eto = 0;.  VdbeB
222e0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
222f0 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  0,2);.  pC->seek
22300 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
22310 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
22320 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
22330 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69  LITE_OK );.    i
22340 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
22350 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
22360 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
22370 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
22380 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
22390 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  2;.    }.  }.  i
223a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
223b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
223c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
223d0 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
223e0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
223f0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22400 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
22410 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20  .**.** Find the 
22420 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  next available s
22430 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
22440 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
22450 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65   Write the seque
22460 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20  nce number into 
22470 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
22480 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
22490 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  ber on the curso
224a0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
224b0 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69   after this.** i
224c0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f  nstruction.  .*/
224d0 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
224e0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
224f0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
22500 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22510 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22520 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
22530 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
22540 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  p1]!=0 );.  asse
22550 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
22560 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21  ->p1]->eCurType!
22570 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
22580 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
22590 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
225a0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
225b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
225c0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
225d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
225e0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
225f0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
22600 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22610 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
22620 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
22630 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
22640 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
22650 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
22660 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
22670 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
22680 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
22690 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
226a0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
226b0 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
226c0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
226d0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
226e0 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
226f0 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
22700 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
22710 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
22720 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
22730 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
22740 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
22750 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
22760 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
22770 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
22780 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
22790 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
227a0 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
227b0 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
227c0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
227d0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
227e0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
227f0 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
22800 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
22810 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
22820 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
22830 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
22840 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
22850 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
22860 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
22870 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
22880 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
22890 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
228a0 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
228b0 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
228c0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
228d0 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
228f0 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
22900 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22910 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
22920 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
22930 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
22940 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
22950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22960 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
22970 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
22980 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
229a0 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
229b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
229c0 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
229d0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
229e0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
229f0 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
22a00 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
22a10 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
22a20 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
22a30 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
22a40 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
22a50 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
22a60 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
22a70 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
22a80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22a90 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22aa0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22ab0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22ac0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22ad0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22ae0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
22af0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
22b00 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
22b10 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
22b20 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a  =0 );.  {.    /*
22b30 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
22b40 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
22b50 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
22b60 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
22b70 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
22b80 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
22b90 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
22ba0 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
22bb0 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
22bc0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
22bd0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
22be0 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
22bf0 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
22c00 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
22c10 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
22c20 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
22c30 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
22c40 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
22c50 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
22c60 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
22c70 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
22c80 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
22c90 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
22ca0 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
22cb0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
22cc0 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
22cd0 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
22ce0 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
22cf0 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
22d00 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
22d10 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
22d20 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
22d30 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
22d40 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
22d50 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
22d60 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
22d70 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
22d80 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
22d90 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
22da0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
22db0 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
22dc0 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
22dd0 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
22de0 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
22df0 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
22e00 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
22e10 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
22e20 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
22e30 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
22e40 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
22e50 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
22e60 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
22e70 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
22e80 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
22e90 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
22ea0 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
22eb0 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
22ec0 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
22ed0 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
22ee0 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
22ef0 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
22f00 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
22f10 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
22f20 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
22f30 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
22f40 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
22f50 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
22f60 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
22f70 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
22f80 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
22f90 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
22fa0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
22fb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22fc0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
22fd0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
22fe0 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
22ff0 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
23000 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
23010 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
23020 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
23030 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75  sorIsValid(pC->u
23040 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  c.pCursor) );.  
23050 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
23060 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
23070 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
23080 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e  ;.        if( v>
23090 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
230a0 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
230b0 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
230c0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
230d0 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20           v++;   
230e0 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d  /* IMP: R-29538-
230f0 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20  34987 */.       
23100 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
23110 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23120 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
23130 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ENT.    if( pOp-
23140 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  >p3 ){.      /* 
23150 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
23160 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
23170 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
23180 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
23190 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
231a0 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
231b0 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
231c0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
231d0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
231e0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
231f0 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  t);.        /* A
23200 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
23210 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
23220 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
23230 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
23240 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
23250 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
23260 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
23270 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d  Op->p3];.      }
23280 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
23290 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
232a0 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
232b0 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
232c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
232d0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
232e0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
232f0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
23300 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
23310 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
23320 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
23330 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23340 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
23350 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
23360 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
23370 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
23380 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
23390 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
233a0 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73  (pMem);.      as
233b0 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
233c0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
233d0 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
233e0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
233f0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d   */.      if( pM
23400 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
23410 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
23420 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
23430 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
23440 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
23450 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f  R-12275-61338 */
23460 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
23470 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
23480 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23490 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
234a0 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  1 ){.        v =
234b0 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
234c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d        }.      pM
234d0 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
234e0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66   }.#endif.    if
234f0 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
23500 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
23510 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
23520 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
23530 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
23540 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
23550 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
23560 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
23570 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
23580 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
23590 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
235a0 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
235b0 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
235c0 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
235d0 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
235e0 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
235f0 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
23600 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
23610 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
23620 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23630 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
23640 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
23650 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
23660 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23680 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
23690 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
236a0 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e  ble. */.      cn
236b0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b  t = 0;.      do{
236c0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
236d0 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
236e0 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
236f0 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
23700 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f  WID>>1); v++;  /
23710 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20  * Ensure that v 
23720 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
23730 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77  zero */.      }w
23740 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71  hile(  ((rc = sq
23750 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
23760 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
23770 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
23780 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  )v,.            
23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237b0 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d       0, &res))==
237c0 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20  SQLITE_OK).     
237d0 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d         && (res==
237e0 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  0).            &
237f0 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a  & (++cnt<100));.
23800 20 20 20 20 20 20 69 66 28 20 72 63 20 29 20 67        if( rc ) g
23810 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23820 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66  _error;.      if
23830 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
23840 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
23850 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
23860 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
23870 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
23880 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
23890 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
238a0 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
238b0 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
238c0 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
238d0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
238e0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
238f0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
23900 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
23910 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
23920 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
23930 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
23940 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
23950 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
23960 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
23970 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
23980 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
23990 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
239a0 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
239b0 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
239c0 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
239d0 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
239e0 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
239f0 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
23a00 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
23a10 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
23a20 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
23a30 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
23a40 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
23a50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
23a60 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
23a70 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
23a80 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
23a90 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
23aa0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
23ab0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
23ac0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
23ad0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
23ae0 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
23af0 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
23b00 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
23b10 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
23b20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
23b30 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
23b40 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
23b50 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
23b60 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
23b70 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
23b80 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
23b90 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
23ba0 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
23bb0 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
23bc0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
23bd0 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 69 66  P5 is set and if
23be0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
23bf0 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20  * the last seek 
23c00 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f  operation (OP_No
23c10 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 53 65  tExists or OP_Se
23c20 65 6b 52 6f 77 69 64 29 20 77 61 73 20 61 20 73  ekRowid) was a s
23c30 75 63 63 65 73 73 2c 0a 2a 2a 20 74 68 65 6e 20  uccess,.** then 
23c40 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f  this.** operatio
23c50 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d  n will not attem
23c60 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61  pt to find the a
23c70 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62  ppropriate row b
23c80 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74  efore doing.** t
23c90 68 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69  he insert but wi
23ca0 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77  ll instead overw
23cb0 72 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61  rite the row tha
23cc0 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  t the cursor is.
23cd0 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ** currently poi
23ce0 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75  nting to.  Presu
23cf0 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72  mably, the prior
23d00 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
23d10 0a 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64  .** OP_SeekRowid
23d20 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61   opcode.** has a
23d30 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65  lready positione
23d40 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72  d the cursor cor
23d50 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73  rectly.  This is
23d60 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
23d70 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20  .** that boosts 
23d80 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61  performance by a
23d90 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e  voiding redundan
23da0 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49  t seeks..**.** I
23db0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
23dc0 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
23dd0 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
23de0 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
23df0 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
23e00 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
23e10 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
23e20 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
23e30 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
23e40 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
23e50 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
23e60 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
23e70 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
23e80 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
23e90 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
23ea0 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
23eb0 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  nt to a Table st
23ec0 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20  ructure, or may 
23ed0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
23ee0 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20  s .** not NULL, 
23ef0 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
23f00 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55  hook (sqlite3.xU
23f10 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
23f20 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f  s invoked .** fo
23f30 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
23f40 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
23f50 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
23f60 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
23f70 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
23f80 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
23f90 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
23fa0 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
23fb0 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
23fc0 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
23fd0 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
23fe0 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
23ff0 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
24000 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
24010 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
24020 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
24030 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
24040 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
24050 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
24060 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
24070 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
24080 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
24090 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
240a0 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
240b0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
240c0 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
240d0 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
240e0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
240f0 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
24100 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
24110 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20  sis:  intkey=P3 
24120 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
24130 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
24140 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
24150 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
24160 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
24170 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
24180 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
24190 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
241a0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
241b0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
241c0 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
241d0 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
241e0 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
241f0 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
24200 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
24210 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
24220 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
24230 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
24240 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
24250 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
24260 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56  he record */.  V
24270 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
24280 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
24290 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
242a0 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
242b0 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
242c0 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
242d0 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
242e0 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
242f0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
24300 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
24310 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
24320 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
24330 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
24340 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
24350 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
24360 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64  structure - used
24370 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70   by update and p
24380 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20  re-update hooks 
24390 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20  */.  int op;    
243a0 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65         /* Opcode
243b0 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b   for update hook
243c0 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  : SQLITE_UPDATE 
243d0 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54  or SQLITE_INSERT
243e0 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f   */.  BtreePaylo
243f0 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f  ad x;   /* Paylo
24400 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  ad to be inserte
24410 64 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a  d */..  op = 0;.
24420 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
24430 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
24440 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24450 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24460 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
24470 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
24480 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
24490 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
244a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
244b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
244c0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
244d0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
244e0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
244f0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
24500 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
24510 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
24520 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
24530 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  ABLE || pOp->p4t
24540 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29  ype>=P4_STATIC )
24550 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
24560 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
24570 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  a);..  if( pOp->
24580 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
24590 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
245a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
245b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
245c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
245d0 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
245e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
245f0 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
24600 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
24610 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b   pKey);.    x.nK
24620 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
24630 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
24640 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
24650 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
24660 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  ;.    x.nKey = p
24670 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
24680 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
24690 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
246a0 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
246b0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
246c0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
246d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
246e0 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20  b>=0 );.    zDb 
246f0 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44  = db->aDb[pC->iD
24700 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70 54  b].zName;.    pT
24710 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
24720 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 48  b;.    assert( H
24730 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 3b  asRowid(pTab) );
24740 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
24750 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
24760 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
24770 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
24780 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c 73 65  INSERT);.  }else
24790 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20  {.    pTab = 0; 
247a0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
247b0 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69 6c 65  Silence a comile
247c0 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
247d0 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e    zDb = 0;  /* N
247e0 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
247f0 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
24800 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
24810 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24820 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
24830 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
24840 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68  the pre-update h
24850 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  ook, if any */. 
24860 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64   if( db->xPreUpd
24870 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20 20  ateCallback .   
24880 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  && pOp->p4type==
24890 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20 21  P4_TABLE.   && !
248a0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
248b0 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20 29 7b  G_ISUPDATE).  ){
248c0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
248d0 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
248e0 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45   pC, SQLITE_INSE
248f0 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 78  RT, zDb, pTab, x
24900 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b  .nKey, pOp->p2);
24910 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
24920 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
24930 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
24940 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
24950 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
24960 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
24970 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
24980 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65  astRowid = x.nKe
24990 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
249a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
249b0 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74 61 20   ){.    x.pData 
249c0 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61  = 0;.    x.nData
249d0 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
249e0 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
249f0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
24a00 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
24a10 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 70 44      x.pData = pD
24a20 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44  ata->z;.    x.nD
24a30 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a  ata = pData->n;.
24a40 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74    }.  seekResult
24a50 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
24a60 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
24a70 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
24a80 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
24a90 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
24aa0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
24ab0 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61   x.nZero = pData
24ac0 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
24ad0 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20  se{.    x.nZero 
24ae0 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65  = 0;.  }.  x.pKe
24af0 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  y = 0;.  rc = sq
24b00 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
24b10 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24b20 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20 20 20   &x,.           
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
24b40 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
24b50 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65 65  _APPEND)!=0, see
24b60 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70  kResult.  );.  p
24b70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24b80 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
24b90 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
24ba0 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e  _STALE;..  /* In
24bb0 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d  voke the update-
24bc0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
24bd0 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20  . */.  if( rc ) 
24be0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24bf0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 64  o_error;.  if( d
24c00 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
24c10 63 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20 20 20  ck && op ){.    
24c20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
24c30 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
24c40 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61  rg, op, zDb, pTa
24c50 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79  b->zName, x.nKey
24c60 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
24c70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
24c80 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50 34  lete P1 P2 P3 P4
24c90 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P5.**.** Delete
24ca0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
24cb0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
24cc0 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
24cd0 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
24ce0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41  If the OPFLAG_SA
24cf0 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f  VEPOSITION bit o
24d00 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65 74  f the P5 paramet
24d10 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a  er is set, then.
24d20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  ** the cursor wi
24d30 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74  ll be left point
24d40 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20 74  ing at  either t
24d50 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70  he next or the p
24d60 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72  revious.** recor
24d70 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  d in the table. 
24d80 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f  If it is left po
24d90 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65  inting at the ne
24da0 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a  xt record, then.
24db0 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74  ** the next Next
24dc0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
24dd0 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73  l be a no-op. As
24de0 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68   a result, in th
24df0 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73  is case.** it is
24e00 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20   ok to delete a 
24e10 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
24e20 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20  in a Next loop. 
24e30 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41  If .** OPFLAG_SA
24e40 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f  VEPOSITION bit o
24e50 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74  f P5 is clear, t
24e60 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77  hen the cursor w
24e70 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69  ill be.** left i
24e80 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73  n an undefined s
24e90 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tate..**.** If t
24ea0 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  he OPFLAG_AUXDEL
24eb0 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  ETE bit is set o
24ec0 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63  n P5, that indic
24ed0 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a  ates that this.*
24ee0 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20  * delete one of 
24ef0 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74  several associat
24f00 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67  ed with deleting
24f10 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
24f20 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f   all its.** asso
24f30 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74  ciated index ent
24f40 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f  ries.  Exactly o
24f50 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65  ne of those dele
24f60 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69 6d  tes is the "prim
24f70 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20  ary".** delete. 
24f80 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65 20   The others are 
24f90 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f  all on OPFLAG_FO
24fa0 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20  RDELETE cursors 
24fb0 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d  or else are.** m
24fc0 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20 41  arked with the A
24fd0 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a  UXDELETE flag..*
24fe0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
24ff0 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
25000 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f  of P2 (NB: P2 no
25010 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74 68  t P5) is set, th
25020 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68  en the row.** ch
25030 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e  ange count is in
25040 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
25050 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a  wise not)..**.**
25060 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P1 must not be 
25070 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
25080 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65  t has to be a re
25090 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a  al table with.**
250a0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a   multiple rows..
250b0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
250c0 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20  ot NULL then it 
250d0 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c  points to a Tabl
250e0 65 20 73 74 72 75 74 75 72 65 2e 20 49 6e 20 74  e struture. In t
250f0 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20  his case either 
25100 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f  .** the update o
25110 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  r pre-update hoo
25120 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20  k, or both, may 
25130 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20  be invoked. The 
25140 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a  P1 cursor must.*
25150 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  * have been posi
25160 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f  tioned using OP_
25170 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
25180 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
25190 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68  opcode in .** th
251a0 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69  is case. Specifi
251b0 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73  cally, if one is
251c0 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65   configured, the
251d0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
251e0 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20   is .** invoked 
251f0 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  if P4 is not NUL
25200 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f  L. The update-ho
25210 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66  ok is invoked if
25220 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
25230 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f  ed, .** P4 is no
25240 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20  t NULL, and the 
25250 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
25260 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
25270 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
25280 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
25290 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
252a0 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69  , then P3 contai
252b0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a  ns the address.*
252c0 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  * of the memory 
252d0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
252e0 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ns the value tha
252f0 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  t the rowid of t
25300 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62  he row will.** b
25310 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20  e set to by the 
25320 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
25330 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  OP_Delete: {.  V
25340 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25350 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
25360 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  ;.  Table *pTab;
25370 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a  .  int opflags;.
25380 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70  .  opflags = pOp
25390 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
253a0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
253b0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
253c0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
253d0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
253e0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
253f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
25400 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
25410 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
25420 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
25430 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
25440 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25450 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66  oveto==0 );..#if
25460 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
25470 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
25480 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
25490 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34  HasRowid(pOp->p4
254a0 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70  .pTab) && pOp->p
254b0 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  5==0 ){.    /* I
254c0 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68  f p5 is zero, th
254d0 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  e seek operation
254e0 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64   that positioned
254f0 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f   the cursor prio
25500 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44  r to.    ** OP_D
25510 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20  elete will have 
25520 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d  also set the pC-
25530 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69  >movetoTarget fi
25540 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64  eld to the rowid
25550 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72   of.    ** the r
25560 6f 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67  ow that is being
25570 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20   deleted */.    
25580 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
25590 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
255a0 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
255b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
255c0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d  C->movetoTarget=
255d0 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e  =iKey );.  }.#en
255e0 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  dif..  /* If the
255f0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20   update-hook or 
25600 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
25610 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
25620 20 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a   set zDb to.  **
25630 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
25640 20 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74   db to pass as t
25650 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c  o it. Also set l
25660 6f 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63  ocal pTab to a c
25670 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70  opy.  ** of p4.p
25680 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  Tab. Finally, if
25690 20 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64   p5 is true, ind
256a0 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69  icating that thi
256b0 73 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a  s cursor was.  *
256c0 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74  * last moved wit
256d0 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f  h OP_Next or OP_
256e0 50 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f  Prev, not Seek o
256f0 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20  r NotFound, set 
25700 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72  .  ** VdbeCursor
25710 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f  .movetoTarget to
25720 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
25730 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  id.  */.  if( pO
25740 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
25750 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54  BLE && HAS_UPDAT
25760 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
25770 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
25780 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
25790 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  rt( pOp->p4.pTab
257a0 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  !=0 );.    zDb =
257b0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
257c0 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  ].zName;.    pTa
257d0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
257e0 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
257f0 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45  p5 & OPFLAG_SAVE
25800 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20  POSITION)!=0 && 
25810 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
25820 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54       pC->movetoT
25830 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42  arget = sqlite3B
25840 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
25850 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
25860 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
25870 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a     zDb = 0;   /*
25880 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
25890 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
258a0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
258b0 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e   pTab = 0;  /* N
258c0 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
258d0 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
258e0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
258f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
25900 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
25910 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
25920 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68  the pre-update-h
25930 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
25940 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
25950 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
25960 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62   && pOp->p4.pTab
25970 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
25980 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
25990 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50  ( !(opflags & OP
259a0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 7c  FLAG_ISUPDATE) |
259b0 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  | (aMem[pOp->p3]
259c0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  .flags & MEM_Int
259d0 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) );.    sqlite3
259e0 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
259f0 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20  k(p, pC,.       
25a00 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c   (opflags & OPFL
25a10 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
25a20 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
25a30 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20  QLITE_DELETE, . 
25a40 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62         zDb, pTab
25a50 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  , pC->movetoTarg
25a60 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d  et,.        pOp-
25a70 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20  >p3.    );.  }. 
25a80 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f   if( opflags & O
25a90 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62  PFLAG_ISNOOP ) b
25aa0 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20  reak;.#endif. . 
25ab0 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74   /* Only flags t
25ac0 68 61 74 20 63 61 6e 20 62 65 20 73 65 74 20 61  hat can be set a
25ad0 72 65 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20  re SAVEPOISTION 
25ae0 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f  and AUXDELETE */
25af0 20 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70   .  assert( (pOp
25b00 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f  ->p5 & ~(OPFLAG_
25b10 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46  SAVEPOSITION|OPF
25b20 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d  LAG_AUXDELETE))=
25b30 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25b40 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
25b50 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50  ION==BTREE_SAVEP
25b60 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73  OSITION );.  ass
25b70 65 72 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44  ert( OPFLAG_AUXD
25b80 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58  ELETE==BTREE_AUX
25b90 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65  DELETE );..#ifde
25ba0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
25bb0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d   if( p->pFrame==
25bc0 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d  0 ){.    if( pC-
25bd0 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a  >isEphemeral==0.
25be0 20 20 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d          && (pOp-
25bf0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58  >p5 & OPFLAG_AUX
25c00 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20  DELETE)==0.     
25c10 20 20 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61     && (pC->wrFla
25c20 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  g & OPFLAG_FORDE
25c30 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29  LETE)==0.      )
25c40 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65  {.      nExtraDe
25c50 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  lete++;.    }.  
25c60 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20    if( pOp->p2 & 
25c70 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
25c80 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65  {.      nExtraDe
25c90 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  lete--;.    }.  
25ca0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d  }.#endif..  rc =
25cb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
25cc0 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ete(pC->uc.pCurs
25cd0 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  or, pOp->p5);.  
25ce0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
25cf0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
25d00 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
25d10 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
25d20 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  r;..  /* Invoke 
25d30 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
25d40 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
25d50 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20    if( opflags & 
25d60 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
25d70 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
25d80 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  ++;.    if( db->
25d90 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
25da0 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  && HasRowid(pTab
25db0 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78  ) ){.      db->x
25dc0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
25dd0 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
25de0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44  QLITE_DELETE, zD
25df0 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a  b, pTab->zName,.
25e00 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f            pC->mo
25e10 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20  vetoTarget);.   
25e20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
25e30 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20  Db>=0 );.    }. 
25e40 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f   }..  break;.}./
25e50 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43  * Opcode: ResetC
25e60 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a  ount * * * * *.*
25e70 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  *.** The value o
25e80 66 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  f the change cou
25e90 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74  nter is copied t
25ea0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
25eb0 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20  andle.** change 
25ec0 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65  counter (returne
25ed0 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
25ee0 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33  calls to sqlite3
25ef0 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20  _changes())..** 
25f00 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74  Then the VMs int
25f10 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75  ernal change cou
25f20 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30  nter resets to 0
25f30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65  ..** This is use
25f40 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
25f50 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  grams..*/.case O
25f60 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a  P_ResetCount: {.
25f70 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
25f80 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
25f90 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43  Change);.  p->nC
25fa0 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65  hange = 0;.  bre
25fb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
25fc0 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20  : SorterCompare 
25fd0 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
25fe0 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79  ynopsis:  if key
25ff0 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d  (P1)!=trim(r[P3]
26000 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ,P4) goto P2.**.
26010 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
26020 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69  r cursor. This i
26030 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61  nstruction compa
26040 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20  res a prefix of 
26050 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c  the.** record bl
26060 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
26070 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65 66  3 against a pref
26080 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20  ix of the entry 
26090 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72  that .** the sor
260a0 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72 65  ter cursor curre
260b0 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20  ntly points to. 
260c0 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   Only the first 
260d0 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20  P4 fields.** of 
260e0 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f  r[P3] and the so
260f0 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
26100 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  compared..**.** 
26110 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20  If either P3 or 
26120 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61  the sorter conta
26130 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e  ins a NULL in on
26140 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69  e of their signi
26150 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73  ficant.** fields
26160 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74   (not counting t
26170 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20  he P4 fields at 
26180 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72  the end which ar
26190 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a  e ignored) then.
261a0 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ** the compariso
261b0 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20  n is assumed to 
261c0 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20  be equal..**.** 
261d0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
261e0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
261f0 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f   if the two reco
26200 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  rds compare equa
26210 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68  l to.** each oth
26220 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  er.  Jump to P2 
26230 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66  if they are diff
26240 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  erent..*/.case O
26250 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a  P_SorterCompare:
26260 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
26270 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
26280 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a    int nKeyCol;..
26290 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
262a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
262b0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
262c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
262d0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
262e0 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20  T32 );.  pIn3 = 
262f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
26300 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d    nKeyCol = pOp-
26310 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30  >p4.i;.  res = 0
26320 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
26330 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72  VdbeSorterCompar
26340 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79  e(pC, pIn3, nKey
26350 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64  Col, &res);.  Vd
26360 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
26370 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
26380 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
26390 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
263a0 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
263b0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
263c0 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
263d0 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
263e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
263f0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
26400 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
26410 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
26420 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
26430 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
26440 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
26450 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
26460 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
26470 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
26480 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
26490 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
264a0 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
264b0 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
264c0 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
264d0 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
264e0 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
264f0 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
26500 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
26510 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
26520 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
26530 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
26540 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
26550 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
26560 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
26570 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
26580 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
26590 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
265a0 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
265b0 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
265c0 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
265d0 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
265e0 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
265f0 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
26600 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
26610 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
26620 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
26630 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
26640 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26650 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26660 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
26670 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
26680 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
26690 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
266a0 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
266b0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
266c0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
266d0 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
266e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
266f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26700 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  r );.  if( rc ) 
26710 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26720 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70  o_error;.  p->ap
26730 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61  Csr[pOp->p3]->ca
26740 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26750 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
26760 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26770 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20  RowData P1 P2 * 
26780 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
26790 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a   r[P2]=data.**.*
267a0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
267b0 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
267c0 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66  plete row data f
267d0 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
267e0 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
267f0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
26800 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
26810 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
26820 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
26830 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
26840 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
26850 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
26860 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
26870 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
26880 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
26890 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
268a0 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
268b0 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
268c0 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
268d0 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  able..*/./* Opco
268e0 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32  de: RowKey P1 P2
268f0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
26900 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a  is: r[P2]=key.**
26910 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
26920 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
26930 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20  omplete row key 
26940 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
26950 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
26960 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
26970 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54  the data.  .** T
26980 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64  he key is copied
26990 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
269a0 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
269b0 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
269c0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
269d0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
269e0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
269f0 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74  st be pointing t
26a00 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e  o a valid row (n
26a10 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a  ot a NULL row).*
26a20 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c  * of a real tabl
26a30 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
26a40 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
26a50 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f  P_RowKey:.case O
26a60 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
26a70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
26a80 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
26a90 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f  ;.  u32 n;..  pO
26aa0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
26ab0 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p2];.  memAboutT
26ac0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
26ad0 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61  ;..  /* Note tha
26ae0 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77  t RowKey and Row
26af0 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20  Data are really 
26b00 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
26b10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
26b20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26b30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26b40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26b50 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26b60 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26b70 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
26b80 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26b90 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
26ba0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
26bb0 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b  Sorter(pC)==0 );
26bc0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
26bd0 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f  sTable || pOp->o
26be0 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74  pcode!=OP_RowDat
26bf0 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  a );.  assert( p
26c00 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c  C->isTable==0 ||
26c10 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
26c20 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61 73  _RowData );.  as
26c30 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
26c40 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
26c50 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
26c60 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
26c70 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
26c80 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f  ..  /* The OP_Ro
26c90 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44  wKey and OP_RowD
26ca0 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
26cb0 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
26cc0 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
26cd0 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f  P_SeekRowid or O
26ce0 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
26cf0 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
26d00 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
26d10 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68  s.  ** that migh
26d20 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  t invalidate the
26d30 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66   cursor..  ** If
26d40 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20   this where not 
26d50 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20  the case, on of 
26d60 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  the following as
26d70 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75  sert()s.  ** wou
26d80 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64  ld fail.  Should
26d90 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67   this ever chang
26da0 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68  e (because of ch
26db0 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64  anges in the cod
26dc0 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72  e.  ** generator
26dd0 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77  ) then the fix w
26de0 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72  ould be to inser
26df0 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  t a call to.  **
26e00 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
26e10 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f  orMoveto()..  */
26e20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
26e30 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
26e40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
26e50 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
26e60 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
26e70 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20  ;.#if 0  /* Not 
26e80 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20  required due to 
26e90 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20  the previous to 
26ea0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
26eb0 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  nts */.  rc = sq
26ec0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
26ed0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
26ee0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
26ef0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26f00 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
26f10 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42  ..  n = sqlite3B
26f20 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28  treePayloadSize(
26f30 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e  pCrsr);.  if( n>
26f40 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
26f50 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
26f60 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
26f70 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
26f80 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29  testcase( n==0 )
26f90 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
26fa0 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
26fb0 73 69 7a 65 28 70 4f 75 74 2c 20 4d 41 58 28 6e  size(pOut, MAX(n
26fc0 2c 33 32 29 29 20 29 7b 0a 20 20 20 20 67 6f 74  ,32)) ){.    got
26fd0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
26fe0 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d  pOut->n = n;.  M
26ff0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
27000 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20  ut, MEM_Blob);. 
27010 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
27020 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
27030 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
27040 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
27050 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t->z);.  }else{.
27060 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27070 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72 2c  BtreeData(pCrsr,
27080 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
27090 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
270a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
270b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d  o_error;.  pOut-
270c0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
270d0 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20  F8;  /* In case 
270e0 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72  the blob is ever
270f0 20 63 61 73 74 20 74 6f 20 74 65 78 74 20 2a 2f   cast to text */
27100 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
27110 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
27120 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
27130 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
27140 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
27150 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
27160 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
27170 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
27180 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
27190 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
271a0 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
271b0 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
271c0 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
271d0 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
271e0 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
271f0 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
27200 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
27210 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
27220 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
27230 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
27240 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
27250 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
27260 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
27270 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
27280 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
27290 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
272a0 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
272b0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
272c0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
272d0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
272e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
272f0 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
27300 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
27310 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
27320 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
27330 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
27340 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
27350 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27360 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27370 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27380 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27390 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
273a0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
273b0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
273c0 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53  Type!=CURTYPE_PS
273d0 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  EUDO || pC->null
273e0 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  Row );.  if( pC-
273f0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
27400 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
27410 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
27420 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
27430 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27440 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
27450 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
27460 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27470 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
27480 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
27490 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
274a0 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73  E_VTAB ){.    as
274b0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43  sert( pC->uc.pVC
274c0 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74  ur!=0 );.    pVt
274d0 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75  ab = pC->uc.pVCu
274e0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d  r->pVtab;.    pM
274f0 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
27500 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65  Module;.    asse
27510 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
27520 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  wid );.    rc = 
27530 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
27540 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76  pC->uc.pVCur, &v
27550 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
27560 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
27570 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
27580 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
27590 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
275a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
275b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
275c0 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
275d0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
275e0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
275f0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
27600 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
27610 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
27620 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
27630 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
27640 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
27650 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27660 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
27670 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
27680 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
27690 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
276a0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
276b0 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
276c0 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
276d0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
276e0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
276f0 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
27700 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
27710 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Row P1 * * * *.*
27720 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75  *.** Move the cu
27730 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c  rsor P1 to a nul
27740 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43  l row.  Any OP_C
27750 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73  olumn operations
27760 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77  .** that occur w
27770 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20  hile the cursor 
27780 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72  is on the null r
27790 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a  ow will always.*
277a0 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a  * write a NULL..
277b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52  */.case OP_NullR
277c0 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ow: {.  VdbeCurs
277d0 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
277e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
277f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
27800 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
27810 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
27820 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
27830 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
27840 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 1;.  pC->cac
27850 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
27860 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43  _STALE;.  if( pC
27870 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
27880 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20  YPE_BTREE ){.   
27890 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
278a0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
278b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
278c0 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  earCursor(pC->uc
278d0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  .pCursor);.  }. 
278e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
278f0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
27900 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   P3 * *.**.** Th
27910 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68  e next use of th
27920 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d  e Rowid or Colum
27930 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75  n or Prev instru
27940 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a  ction for P1 .**
27950 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74   will refer to t
27960 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
27970 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
27980 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
27990 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
279a0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
279b0 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a  and P2>0, then j
279c0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
279d0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20  to P2..** If P2 
279e0 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74  is 0 or if the t
279f0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
27a00 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
27a10 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
27a20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
27a30 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
27a40 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
27a50 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
27a60 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
27a70 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
27a80 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
27a90 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
27aa0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
27ab0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
27ac0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
27ad0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
27ae0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a  v, not Next..*/.
27af0 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
27b00 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
27b10 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
27b20 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
27b30 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
27b40 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
27b50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27b60 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27b70 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27b80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27b90 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
27ba0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
27bb0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
27bc0 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
27bd0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
27be0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
27bf0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
27c00 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
27c10 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
27c20 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
27c30 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
27c40 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
27c50 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
27c60 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
27c70 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
27c80 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70  ->seekResult = p
27c90 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53  Op->p3;.#ifdef S
27ca0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
27cb0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61  ->seekOp = OP_La
27cc0 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  st;.#endif.  if(
27cd0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
27ce0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
27cf0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29   if( pOp->p2>0 )
27d00 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
27d10 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
27d20 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20 67  .    if( res ) g
27d30 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
27d40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27d50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
27d60 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
27d70 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
27d80 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
27d90 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
27da0 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
27db0 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
27dc0 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
27dd0 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
27de0 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
27df0 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
27e00 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
27e10 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
27e20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
27e30 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
27e40 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
27e50 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
27e60 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
27e70 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
27e80 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
27e90 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
27ea0 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
27eb0 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
27ec0 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
27ed0 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
27ee0 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
27ef0 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
27f00 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
27f10 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
27f20 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
27f30 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
27f40 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
27f50 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
27f60 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
27f70 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20   OP_SorterSort: 
27f80 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
27f90 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
27fa0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
27fb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
27fc0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
27fd0 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
27fe0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
27ff0 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
28000 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
28010 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
28020 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
28030 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
28040 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
28050 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
28060 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
28070 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
28080 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
28090 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72  mn or Next instr
280a0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
280b0 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
280c0 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20  the first entry 
280d0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
280e0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
280f0 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
28100 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
28110 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  y, jump immediat
28120 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
28130 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
28140 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
28150 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
28160 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
28170 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
28180 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28190 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
281a0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
281b0 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
281c0 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
281d0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
281e0 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
281f0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
28200 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
28210 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
28220 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
28230 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ev..*/.case OP_R
28240 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  ewind: {        
28250 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
28260 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
28270 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
28280 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
28290 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
282a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
282b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
282c0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
282d0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
282e0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
282f0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
28300 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28310 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20  SorterSort) );. 
28320 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66   res = 1;.#ifdef
28330 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
28340 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
28350 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20  Rewind;.#endif. 
28360 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
28370 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
28380 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
28390 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b  ewind(pC, &res);
283a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
283b0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
283c0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
283d0 45 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d  E );.    pCrsr =
283e0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
283f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
28400 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
28410 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
28420 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
28430 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
28440 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
28450 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
28460 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
28470 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
28480 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
28490 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  rror;.  pC->null
284a0 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
284b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
284c0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
284d0 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72  >nOp );.  VdbeBr
284e0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
284f0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
28500 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
28510 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
28520 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
28530 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
28540 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
28550 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
28560 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
28570 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
28580 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
28590 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
285a0 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
285b0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
285c0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
285d0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
285e0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
285f0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
28600 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
28610 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
28620 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
28630 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
28640 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
28650 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
28660 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47  llowing an SeekG
28670 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a  T, SeekGE, or.**
28680 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64   OP_Rewind opcod
28690 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
286a0 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
286b0 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Next is not allo
286c0 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
286d0 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
286e0 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a   or OP_Last..**.
286f0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
28700 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
28710 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
28720 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
28730 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  P1 must have.** 
28740 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f  been opened prio
28750 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  r to this opcode
28760 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20   or the program 
28770 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a  will segfault..*
28780 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
28790 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
287a0 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
287b0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
287c0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
287d0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
287e0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
287f0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
28800 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
28810 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
28820 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
28830 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
28840 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
28850 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
28860 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
28870 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
28880 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
28890 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
288a0 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
288b0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
288c0 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
288d0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
288e0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
288f0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
28900 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
28910 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
28920 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
28930 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
28940 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
28950 3a 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70  : Prev, NextIfOp
28960 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  en.*/./* Opcode:
28970 20 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50   NextIfOpen P1 P
28980 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
28990 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
289a0 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78  ks just like Nex
289b0 74 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66  t except that if
289c0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f   cursor P1 is no
289d0 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68  t.** open it beh
289e0 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f  aves a no-op..*/
289f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
28a00 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
28a10 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20 63 75  **.** Back up cu
28a20 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
28a30 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
28a40 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 64 61   previous key/da
28a50 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
28a60 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
28a70 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  .  If there is n
28a80 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f 76  o previous key/v
28a90 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
28aa0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
28ab0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
28ac0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
28ad0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
28ae0 20 62 61 63 6b 75 70 20 77 61 73 20 73 75 63 63   backup was succ
28af0 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
28b00 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
28b10 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2..**.**.** The 
28b20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
28b30 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
28b40 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53  ing an SeekLT, S
28b50 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekLE, or.** OP_
28b60 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73 65 64  Last opcode used
28b70 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
28b80 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76 20 69   cursor.  Prev i
28b90 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
28ba0 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47   to follow SeekG
28bb0 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50  T, SeekGE, or OP
28bc0 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54  _Rewind..**.** T
28bd0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
28be0 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
28bf0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
28c00 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66 20 50  udo-table.  If P
28c10 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e  1 is.** not open
28c20 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
28c30 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
28c40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61  .**.** The P3 va
28c50 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f  lue is a hint to
28c60 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65   the btree imple
28c70 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33  mentation. If P3
28c80 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61  ==1, that.** mea
28c90 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20  ns P1 is an SQL 
28ca0 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20 74  index and that t
28cb0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
28cc0 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  could have been.
28cd0 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68  ** omitted if th
28ce0 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65 65  at index had bee
28cf0 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73  n unique.  P3 is
28d00 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20   usually 0.  P3 
28d10 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74  is.** always eit
28d20 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a  her 0 or 1..**.*
28d30 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f  * P4 is always o
28d40 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43  f type P4_ADVANC
28d50 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  E. The function 
28d60 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74  pointer points t
28d70 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65  o.** sqlite3Btre
28d80 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a  ePrevious()..**.
28d90 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
28da0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
28db0 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
28dc0 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
28dd0 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
28de0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
28df0 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
28e00 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mented..*/./* Op
28e10 63 6f 64 65 3a 20 50 72 65 76 49 66 4f 70 65 6e  code: PrevIfOpen
28e20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
28e30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
28e40 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
28e50 65 20 50 72 65 76 20 65 78 63 65 70 74 20 74 68  e Prev except th
28e60 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
28e70 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
28e80 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
28e90 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  p..*/.case OP_So
28ea0 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20  rterNext: {  /* 
28eb0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
28ec0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
28ed0 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  res;..  pC = p->
28ee0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28ef0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
28f00 65 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20  er(pC) );.  res 
28f10 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
28f20 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78  te3VdbeSorterNex
28f30 74 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b  t(db, pC, &res);
28f40 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69  .  goto next_tai
28f50 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49  l;.case OP_PrevI
28f60 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
28f70 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
28f80 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  tIfOpen:    /* j
28f90 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e  ump */.  if( p->
28fa0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d  apCsr[pOp->p1]==
28fb0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
28fc0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a  Fall through */.
28fd0 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
28fe0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28ff0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
29000 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
29010 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
29020 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29030 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
29040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29050 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  >p5<ArraySize(p-
29060 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
29070 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29080 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20  p->p1];.  res = 
29090 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
290a0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
290b0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
290c0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
290d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
290e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
290f0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
29100 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73  ( res==0 || (res
29110 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62  ==1 && pC->isTab
29120 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74  le==0) );.  test
29130 63 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a  case( res==1 );.
29140 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
29150 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
29160 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
29170 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
29180 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
29190 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
291a0 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
291b0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
291c0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
291d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
291e0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
291f0 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d  xtIfOpen || pOp-
29200 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
29210 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
29220 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29230 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
29240 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70  IfOpen || pOp->p
29250 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
29260 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
29270 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78  );..  /* The Nex
29280 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
29290 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
292a0 47 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20  GT, SeekGE, and 
292b0 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65  Rewind..  ** The
292c0 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20   Prev opcode is 
292d0 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20  only used after 
292e0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
292f0 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61  and Last. */.  a
29300 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
29310 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
29320 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
29330 65 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20  extIfOpen.      
29340 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
29350 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d  OP_SeekGT || pC-
29360 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
29370 47 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  GE.       || pC-
29380 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69  >seekOp==OP_Rewi
29390 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  nd || pC->seekOp
293a0 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61  ==OP_Found);.  a
293b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
293c0 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
293d0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
293e0 72 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20  revIfOpen.      
293f0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
29400 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d  OP_SeekLT || pC-
29410 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
29420 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  LE.       || pC-
29430 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74  >seekOp==OP_Last
29440 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d   );..  rc = pOp-
29450 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
29460 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65  >uc.pCursor, &re
29470 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20  s);.next_tail:. 
29480 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
29490 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
294a0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
294b0 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69  n(res==0,2);.  i
294c0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
294d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
294e0 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
294f0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
29500 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f   = 0;.    p->aCo
29510 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b  unter[pOp->p5]++
29520 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
29530 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33  TEST.    sqlite3
29540 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b  _search_count++;
29550 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f  .#endif.    goto
29560 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
29570 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
29580 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  upt;.  }else{.  
29590 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
295a0 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  1;.  }.  goto ch
295b0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
295c0 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
295d0 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32   IdxInsert P1 P2
295e0 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f   P3 * P5.** Syno
295f0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
29600 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
29610 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
29620 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
29630 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
29640 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
29650 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
29660 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
29670 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
29680 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
29690 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
296a0 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61  l..**.** P3 is a
296b0 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76 69   flag that provi
296c0 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68  des a hint to th
296d0 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 74  e b-tree layer t
296e0 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65  hat this.** inse
296f0 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
29700 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
29710 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
29720 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
29730 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
29740 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
29750 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  r is.** incremen
29760 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  ted by this inst
29770 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
29780 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
29790 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a  bit is clear,.**
297a0 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
297b0 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68   counter is unch
297c0 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anged..**.** If 
297d0 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
297e0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
297f0 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
29800 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61  e cursor must ha
29810 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20  ve.** just done 
29820 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73 70  a seek to the sp
29830 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65 77  ot where the new
29840 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65 20   entry is to be 
29850 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69  inserted..** Thi
29860 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64 6f  s flag avoids do
29870 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65 65  ing an extra see
29880 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  k..**.** This in
29890 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
298a0 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
298b0 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
298c0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
298d0 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
298e0 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73  P_Insert..*/.cas
298f0 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  e OP_SorterInser
29900 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  t:       /* in2 
29910 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
29920 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
29930 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
29940 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72  ursor *pC;.  Btr
29950 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20  eePayload x;..  
29960 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29970 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
29980 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
29990 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
299a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
299b0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
299c0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
299d0 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  =(pOp->opcode==O
299e0 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20  P_SorterInsert) 
299f0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
29a00 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
29a10 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67  sert( pIn2->flag
29a20 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
29a30 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
29a40 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
29a50 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
29a60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
29a70 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
29a80 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  TREE || pOp->opc
29a90 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
29aa0 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74  sert );.  assert
29ab0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
29ac0 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e   );.  rc = Expan
29ad0 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69  dBlob(pIn2);.  i
29ae0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
29af0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
29b00 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
29b10 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
29b20 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ert ){.    rc = 
29b30 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
29b40 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29  rWrite(pC, pIn2)
29b50 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
29b60 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b  .nKey = pIn2->n;
29b70 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49  .    x.pKey = pI
29b80 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61  n2->z;.    x.nDa
29b90 74 61 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 5a  ta = 0;.    x.nZ
29ba0 65 72 6f 20 3d 20 30 3b 0a 20 20 20 20 78 2e 70  ero = 0;.    x.p
29bb0 44 61 74 61 20 3d 20 30 3b 0a 20 20 20 20 72 63  Data = 0;.    rc
29bc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
29bd0 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75  nsert(pC->uc.pCu
29be0 72 73 6f 72 2c 20 26 78 2c 20 70 4f 70 2d 3e 70  rsor, &x, pOp->p
29bf0 33 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f  3, .        ((pO
29c00 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
29c10 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
29c20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
29c30 20 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20   0).        );. 
29c40 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
29c50 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
29c60 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
29c70 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29c80 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
29c90 20 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f   rc) goto abort_
29ca0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
29cb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29cc0 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
29cd0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
29ce0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
29cf0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2@P3].**.** The 
29d00 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65  content of P3 re
29d10 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
29d20 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20   at register P2 
29d30 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63  form.** an unpac
29d40 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54  ked index key. T
29d50 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76  his opcode remov
29d60 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72  es that entry fr
29d70 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78  om the .** index
29d80 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
29d90 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
29da0 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20  _IdxDelete: {.  
29db0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
29dc0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
29dd0 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
29de0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
29df0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
29e00 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
29e10 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
29e20 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
29e30 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
29e40 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
29e50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29e60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29e70 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
29e80 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29e90 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29ea0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
29eb0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
29ec0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
29ed0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
29ee0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
29ef0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
29f00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
29f10 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e  p->p5==0 );.  r.
29f20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
29f30 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
29f40 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
29f50 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f  p3;.  r.default_
29f60 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d  rc = 0;.  r.aMem
29f70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
29f80 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ];.  rc = sqlite
29f90 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
29fa0 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
29fb0 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69  0, 0, &res);.  i
29fc0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
29fd0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
29fe0 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
29ff0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2a000 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72  3BtreeDelete(pCr
2a010 73 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45 4c  sr, BTREE_AUXDEL
2a020 45 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ETE);.    if( rc
2a030 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2a040 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2a050 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2a060 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2a070 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
2a080 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2a090 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
2a0a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
2a0b0 50 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20  P1 * P3 P4 *.** 
2a0c0 53 79 6e 6f 70 73 69 73 3a 20 20 4d 6f 76 65 20  Synopsis:  Move 
2a0d0 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64 0a 2a  P3 to P1.rowid.*
2a0e0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70  *.** P1 is an op
2a0f0 65 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  en index cursor 
2a100 61 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73  and P3 is a curs
2a110 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  or on the corres
2a120 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65  ponding.** table
2a130 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  .  This opcode d
2a140 6f 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73  oes a deferred s
2a150 65 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61  eek of the P3 ta
2a160 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f  ble cursor.** to
2a170 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f   the row that co
2a180 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
2a190 20 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20   current row of 
2a1a0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P1..**.** This i
2a1b0 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2a1c0 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
2a1d0 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
2a1e0 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
2a1f0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
2a200 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
2a210 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
2a220 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
2a230 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
2a240 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34  appens..**.** P4
2a250 20 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79   may be an array
2a260 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79   of integers (ty
2a270 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20  pe P4_INTARRAY) 
2a280 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e  containing.** on
2a290 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
2a2a0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50   column in the P
2a2b0 33 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72  3 table.  If arr
2a2c0 61 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a  ay entry a(i).**
2a2d0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2a2e0 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2a2f0 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75  n a(i)-1 from cu
2a300 72 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65  rsor P3 is .** e
2a310 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72  quivalent to per
2a320 66 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65  forming the defe
2a330 72 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68  rred seek and th
2a340 65 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d  en reading colum
2a350 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e  n i .** from P1.
2a360 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69    This informati
2a370 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
2a380 50 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72  P3 and used to r
2a390 65 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73  edirect.** reads
2a3a0 20 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72   against P3 over
2a3b0 20 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73   to P1, thus pos
2a3c0 73 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74  sibly avoiding t
2a3d0 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65  he need to.** se
2a3e0 65 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73  ek and read curs
2a3f0 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  or P3..*/./* Opc
2a400 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31  ode: IdxRowid P1
2a410 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a420 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
2a430 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  id.**.** Write i
2a440 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
2a450 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
2a460 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74   is the last ent
2a470 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ry in the record
2a480 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f   at.** the end o
2a490 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20  f the index key 
2a4a0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75  pointed to by cu
2a4b0 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69  rsor P1.  This i
2a4c0 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65  nteger should be
2a4d0 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66  .** the rowid of
2a4e0 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2a4f0 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
2a500 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74  ndex entry point
2a510 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
2a520 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65  o: Rowid, MakeRe
2a530 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  cord..*/.case OP
2a540 5f 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49  _Seek:.case OP_I
2a550 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
2a560 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2a570 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2a580 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  *pC;            
2a590 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e      /* The P1 in
2a5a0 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  dex cursor */.  
2a5b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62  VdbeCursor *pTab
2a5c0 43 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Cur;           /
2a5d0 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63  * The P2 table c
2a5e0 75 72 73 6f 72 20 28 4f 50 5f 53 65 65 6b 20 6f  ursor (OP_Seek o
2a5f0 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f  nly) */.  i64 ro
2a600 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  wid;            
2a610 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69           /* Rowi
2a620 64 20 74 68 61 74 20 50 31 20 63 75 72 72 65 6e  d that P1 curren
2a630 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a  t points to */..
2a640 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a650 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2a660 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2a670 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2a680 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2a690 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2a6a0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2a6b0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2a6c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2a6d0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2a6e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2a6f0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
2a700 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2a710 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2a720 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 43 2d  ;.  assert( !pC-
2a730 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d  >nullRow || pOp-
2a740 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
2a750 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68  owid );..  /* Th
2a760 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53  e IdxRowid and S
2a770 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20  eek opcodes are 
2a780 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65  combined because
2a790 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c   of the commonal
2a7a0 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69  ity.  ** of sqli
2a7b0 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2a7c0 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74  tore() and sqlit
2a7d0 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 29  e3VdbeIdxRowid()
2a7e0 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
2a7f0 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
2a800 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20  tore(pC);..  /* 
2a810 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72  sqlite3VbeCursor
2a820 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e  Restore() can on
2a830 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72  ly fail if the r
2a840 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64  ecord has been d
2a850 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20  eleted.  ** out 
2a860 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63  from under the c
2a870 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c  ursor.  That wil
2a880 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20  l never happens 
2a890 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a  for an IdxRowid.
2a8a0 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63    ** or Seek opc
2a8b0 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56  ode */.  if( NEV
2a8c0 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  ER(rc!=SQLITE_OK
2a8d0 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  ) ) goto abort_d
2a8e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
2a8f0 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
2a900 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20   ){.    rowid = 
2a910 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2a920 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
2a930 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2a940 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2a950 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
2a960 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70  wid(db, pC->uc.p
2a970 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b  Cursor, &rowid);
2a980 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
2a990 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2a9a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a9b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
2a9c0 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f     if( pOp->opco
2a9d0 64 65 3d 3d 4f 50 5f 53 65 65 6b 20 29 7b 0a 20  de==OP_Seek ){. 
2a9e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2a9f0 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
2aa00 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p3<p->nCursor );
2aa10 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d  .      pTabCur =
2aa20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2aa30 33 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  3];.      assert
2aa40 28 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a  ( pTabCur!=0 );.
2aa50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2aa60 61 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d  abCur->eCurType=
2aa70 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2aa80 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2aa90 70 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72  pTabCur->uc.pCur
2aaa0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  sor!=0 );.      
2aab0 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2aac0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
2aad0 20 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52    pTabCur->nullR
2aae0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54  ow = 0;.      pT
2aaf0 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72  abCur->movetoTar
2ab00 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  get = rowid;.   
2ab10 20 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65     pTabCur->defe
2ab20 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
2ab30 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
2ab40 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2ab50 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70  TARRAY || pOp->p
2ab60 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20  4.ai==0 );.     
2ab70 20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61   pTabCur->aAltMa
2ab80 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  p = pOp->p4.ai;.
2ab90 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70        pTabCur->p
2aba0 41 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a  AltCursor = pC;.
2abb0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2abc0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
2abd0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
2abe0 20 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20        pOut->u.i 
2abf0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2ac00 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2ac10 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  _Int;.    }.  }e
2ac20 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2ac30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2ac40 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  _IdxRowid );.   
2ac50 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2ac60 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70  etNull(&aMem[pOp
2ac70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72  ->p2]);.  }.  br
2ac80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2ac90 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
2aca0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2acb0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2acc0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2acd0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2ace0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2acf0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2ad00 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2ad10 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2ad20 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
2ad30 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2ad40 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
2ad50 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
2ad60 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
2ad70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
2ad80 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
2ad90 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
2ada0 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
2adb0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
2adc0 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
2add0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2ade0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
2adf0 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
2ae00 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
2ae10 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
2ae20 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2ae30 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
2ae40 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2ae50 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
2ae60 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2ae70 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2ae80 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2ae90 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2aea0 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2aeb0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2aec0 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2aed0 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2aee0 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2aef0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2af00 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2af10 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2af20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2af30 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2af40 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2af50 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2af60 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2af70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2af80 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2af90 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
2afa0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2afb0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2afc0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2afd0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2afe0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2aff0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2b000 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
2b010 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2b020 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2b030 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2b040 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2b050 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2b060 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2b070 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2b080 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2b090 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2b0a0 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2b0b0 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2b0c0 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2b0d0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2b0e0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2b0f0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2b100 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2b110 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2b120 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2b130 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2b140 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
2b150 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
2b160 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
2b170 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2b180 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2b190 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2b1a0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2b1b0 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
2b1c0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2b1d0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2b1e0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2b1f0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2b200 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2b210 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2b220 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2b230 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2b240 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
2b250 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
2b260 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
2b270 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
2b280 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2b290 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2b2a0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2b2b0 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
2b2c0 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
2b2d0 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
2b2e0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2b2f0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
2b300 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2b310 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2b320 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
2b330 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2b340 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2b350 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2b360 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
2b370 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b380 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
2b390 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2b3a0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
2b3b0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
2b3c0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2b3d0 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
2b3e0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2b3f0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
2b400 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
2b410 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
2b420 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b430 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2b440 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2b450 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b460 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b470 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b480 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
2b490 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b4a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2b4b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2b4c0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2b4d0 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
2b4e0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2b4f0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2b500 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
2b510 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
2b520 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2b530 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
2b540 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
2b550 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
2b560 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
2b570 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2b580 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2b590 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
2b5a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2b5b0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2b5c0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2b5d0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
2b5e0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
2b5f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2b600 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2b610 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
2b620 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b630 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
2b640 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2b650 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
2b660 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
2b670 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2b680 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
2b690 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
2b6a0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
2b6b0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
2b6c0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
2b6d0 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
2b6e0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2b6f0 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2b700 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2b710 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2b720 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
2b730 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
2b740 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
2b750 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
2b760 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
2b770 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
2b780 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
2b790 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
2b7a0 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
2b7b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2b7c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2b7d0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2b7e0 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
2b7f0 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
2b800 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2b810 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2b820 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2b830 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2b840 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
2b850 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
2b860 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
2b870 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2b880 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b890 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30  ror;.  if( res>0
2b8a0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2b8b0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2b8c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
2b8d0 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
2b8e0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
2b8f0 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2b900 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2b910 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
2b920 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
2b930 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
2b940 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
2b950 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
2b960 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
2b970 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2b980 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
2b990 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
2b9a0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2b9b0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2b9c0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2b9d0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2b9e0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2b9f0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2ba00 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2ba10 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2ba20 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
2ba30 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
2ba40 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2ba50 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
2ba60 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
2ba70 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
2ba80 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
2ba90 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
2baa0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
2bab0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
2bac0 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
2bad0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
2bae0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
2baf0 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
2bb00 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
2bb10 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
2bb20 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
2bb30 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
2bb40 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
2bb50 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
2bb60 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d  If no page .** m
2bb70 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75  ovement was requ
2bb80 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68  ired (because th
2bb90 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  e table being dr
2bba0 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
2bbb0 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f  y .** the last o
2bbc0 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
2bbd0 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  se) then a zero 
2bbe0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2bbf0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20  ister P2..** If 
2bc00 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
2bc10 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
2bc20 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ro is stored in 
2bc30 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2bc40 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
2bc50 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
2bc60 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
2bc70 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
2bc80 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b  oved;.  int iDb;
2bc90 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
2bca0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2bcb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bcc0 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  1 );.  pOut = ou
2bcd0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2bce0 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
2bcf0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2bd00 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52    if( db->nVdbeR
2bd10 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74  ead > db->nVDest
2bd20 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20  roy+1 ){.    rc 
2bd30 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
2bd40 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  .    p->errorAct
2bd50 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a  ion = OE_Abort;.
2bd60 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
2bd70 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2bd80 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20  else{.    iDb = 
2bd90 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73  pOp->p3;.    ass
2bda0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2bdb0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
2bdc0 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64  b) );.    iMoved
2bdd0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2bde0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73  eded.  Only to s
2bdf0 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
2be00 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
2be10 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61  lite3BtreeDropTa
2be20 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ble(db->aDb[iDb]
2be30 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26  .pBt, pOp->p1, &
2be40 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75  iMoved);.    pOu
2be50 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
2be60 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
2be70 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20  i = iMoved;.    
2be80 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2be90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2bea0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2beb0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
2bec0 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21  .    if( iMoved!
2bed0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
2bee0 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
2bef0 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
2bf00 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
2bf10 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
2bf20 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
2bf30 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
2bf40 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
2bf50 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
2bf60 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
2bf70 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2bf80 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
2bf90 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
2bfa0 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
2bfb0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
2bfc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2bfd0 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
2bfe0 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
2bff0 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
2c000 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2c010 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2c020 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
2c030 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
2c040 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
2c050 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
2c060 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
2c070 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
2c080 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2c090 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
2c0a0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2c0b0 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
2c0c0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2c0d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2c0e0 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
2c0f0 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
2c100 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2c110 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2c120 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2c130 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2c140 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2c150 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2c160 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2c170 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2c180 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
2c190 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
2c1a0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
2c1b0 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
2c1c0 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
2c1d0 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
2c1e0 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
2c1f0 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
2c200 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
2c210 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
2c220 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2c230 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2c240 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2c250 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
2c260 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
2c270 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
2c280 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
2c290 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
2c2a0 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
2c2b0 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
2c2c0 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
2c2d0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2c2e0 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
2c2f0 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
2c300 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
2c310 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
2c320 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
2c330 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
2c340 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2c350 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2c360 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2c370 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
2c380 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2c390 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
2c3a0 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
2c3b0 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
2c3c0 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
2c3d0 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
2c3e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
2c3f0 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
2c400 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2c410 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
2c420 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2c430 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
2c440 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
2c450 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
2c460 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
2c470 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
2c480 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
2c490 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
2c4a0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
2c4b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2c4c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2c4d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c4e0 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31  : ResetSorter P1
2c4f0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
2c500 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2c510 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65  ts from the ephe
2c520 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73  meral table or s
2c530 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73  orter.** that is
2c540 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20   open on cursor 
2c550 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P1..**.** This o
2c560 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73  pcode only works
2c570 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65   for cursors use
2c580 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e  d for sorting an
2c590 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68  d.** opened with
2c5a0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
2c5b0 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70  l or OP_SorterOp
2c5c0 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  en..*/.case OP_R
2c5d0 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20  esetSorter: {.  
2c5e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2c5f0 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d   .  assert( pOp-
2c600 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2c610 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2c620 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2c630 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2c640 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
2c650 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
2c660 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2c670 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
2c680 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72  , pC->uc.pSorter
2c690 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
2c6a0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2c6b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2c6c0 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
2c6d0 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
2c6e0 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
2c6f0 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2c700 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
2c710 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2c720 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
2c730 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2c740 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
2c750 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2c760 43 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50  CreateTable P1 P
2c770 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2c780 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2c790 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
2c7a0 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c  ocate a new tabl
2c7b0 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
2c7c0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2c7d0 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
2c7e0 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
2c7f0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2c800 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
2c810 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
2c820 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
2c830 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
2c840 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
2c850 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
2c860 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a  egister P2.**.**
2c870 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
2c880 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20  between a table 
2c890 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20  and an index is 
2c8a0 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d  this:  A table m
2c8b0 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d  ust.** have a 4-
2c8c0 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79  byte integer key
2c8d0 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72   and can have ar
2c8e0 62 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41  bitrary data.  A
2c8f0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61  n index.** has a
2c900 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
2c910 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a  but no data..**.
2c920 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65  ** See also: Cre
2c930 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f  ateIndex.*/./* O
2c940 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64  pcode: CreateInd
2c950 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ex P1 P2 * * *.*
2c960 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2c970 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
2c980 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
2c990 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ew index in the 
2c9a0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2c9b0 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
2c9c0 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
2c9d0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2c9e0 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
2c9f0 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
2ca00 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
2ca10 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
2ca20 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
2ca30 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
2ca40 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2ca50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63  2..**.** See doc
2ca60 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50  umentation on OP
2ca70 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72  _CreateTable for
2ca80 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
2ca90 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
2caa0 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a   OP_CreateIndex:
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
2cac0 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ut2 */.case OP_C
2cad0 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20  reateTable: {   
2cae0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2caf0 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20  /.  int pgno;.  
2cb00 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20  int flags;.  Db 
2cb10 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  *pDb;..  pOut = 
2cb20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2cb30 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d  , pOp);.  pgno =
2cb40 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2cb50 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2cb60 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2cb70 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2cb80 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2cb90 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
2cba0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2cbb0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
2cbc0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
2cbd0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2cbe0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
2cbf0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2cc00 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20  =OP_CreateTable 
2cc10 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20  ){.    /* flags 
2cc20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20  = BTREE_INTKEY; 
2cc30 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  */.    flags = B
2cc40 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d  TREE_INTKEY;.  }
2cc50 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20  else{.    flags 
2cc60 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b  = BTREE_BLOBKEY;
2cc70 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
2cc80 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
2cc90 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70  ble(pDb->pBt, &p
2cca0 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69  gno, flags);.  i
2ccb0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2ccc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ccd0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
2cce0 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  gno;.  break;.}.
2ccf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73  ./* Opcode: Pars
2cd00 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50  eSchema P1 * * P
2cd10 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61  4 *.**.** Read a
2cd20 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74  nd parse all ent
2cd30 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51  ries from the SQ
2cd40 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c  LITE_MASTER tabl
2cd50 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
2cd60 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74  .** that match t
2cd70 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2cd80 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4. .**.** This 
2cd90 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
2cda0 68 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65  he parser to cre
2cdb0 61 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61  ate a new virtua
2cdc0 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68  l machine,.** th
2cdd0 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20  en runs the new 
2cde0 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e  virtual machine.
2cdf0 20 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72    It is thus a r
2ce00 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65  e-entrant opcode
2ce10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
2ce20 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e  seSchema: {.  in
2ce30 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63  t iDb;.  const c
2ce40 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20  har *zMaster;.  
2ce50 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e  char *zSql;.  In
2ce60 69 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b  itData initData;
2ce70 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61  ..  /* Any prepa
2ce80 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68  red statement th
2ce90 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  at invokes this 
2cea0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64  opcode will hold
2ceb0 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e   mutexes.  ** on
2cec0 20 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54   every btree.  T
2ced0 68 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75  his is a prerequ
2cee0 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69  isite for invoki
2cef0 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33  ng .  ** sqlite3
2cf00 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a  InitCallback()..
2cf10 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
2cf20 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
2cf30 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44  Db=0; iDb<db->nD
2cf40 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61  b; iDb++){.    a
2cf50 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c  ssert( iDb==1 ||
2cf60 20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c   sqlite3BtreeHol
2cf70 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b  dsMutex(db->aDb[
2cf80 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d  iDb].pBt) );.  }
2cf90 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d  .#endif..  iDb =
2cfa0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65   pOp->p1;.  asse
2cfb0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
2cfc0 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
2cfd0 73 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70  ssert( DbHasProp
2cfe0 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42  erty(db, iDb, DB
2cff0 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
2d000 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62  ;.  /* Used to b
2d010 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20  e a conditional 
2d020 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72  */ {.    zMaster
2d030 20 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28   = SCHEMA_TABLE(
2d040 69 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61  iDb);.    initDa
2d050 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  ta.db = db;.    
2d060 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70  initData.iDb = p
2d070 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74  Op->p1;.    init
2d080 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
2d090 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  &p->zErrMsg;.   
2d0a0 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d   zSql = sqlite3M
2d0b0 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20  Printf(db,.     
2d0c0 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    "SELECT name, 
2d0d0 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52  rootpage, sql FR
2d0e0 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45  OM '%q'.%s WHERE
2d0f0 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77   %s ORDER BY row
2d100 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e  id",.       db->
2d110 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  aDb[iDb].zName, 
2d120 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34  zMaster, pOp->p4
2d130 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71  .z);.    if( zSq
2d140 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  l==0 ){.      rc
2d150 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f   = SQLITE_NOMEM_
2d160 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
2d170 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
2d180 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
2d190 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
2d1a0 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
2d1b0 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
2d1c0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
2d1d0 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
2d1e0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
2d1f0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2d200 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
2d210 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2d220 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
2d230 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
2d240 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
2d250 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
2d260 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
2d270 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
2d280 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2d290 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
2d2a0 7d 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  }.  if( rc ){.  
2d2b0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
2d2c0 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
2d2d0 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69 66  tion(db);.    if
2d2e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d  ( rc==SQLITE_NOM
2d2f0 45 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  EM ){.      goto
2d300 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20   no_mem;.    }. 
2d310 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2d320 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2d330 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69    break;  .}..#i
2d340 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2d350 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a  E_OMIT_ANALYZE).
2d360 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41  /* Opcode: LoadA
2d370 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a  nalysis P1 * * *
2d380 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68   *.**.** Read th
2d390 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
2d3a0 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  able for databas
2d3b0 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68  e P1 and load th
2d3c0 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20  e content.** of 
2d3d0 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20  that table into 
2d3e0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64  the internal ind
2d3f0 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ex hash table.  
2d400 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a  This will cause.
2d410 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  ** the analysis 
2d420 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
2d430 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75  preparing all su
2d440 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73  bsequent queries
2d450 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61  ..*/.case OP_Loa
2d460 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61  dAnalysis: {.  a
2d470 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2d480 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2d490 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73  >nDb );.  rc = s
2d4a0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
2d4b0 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b  ad(db, pOp->p1);
2d4c0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2d4d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d4e0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  ror;.  break;  .
2d4f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
2d500 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2d510 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
2d520 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
2d530 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
2d540 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2d550 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2d560 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2d570 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2d580 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
2d590 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2d5a0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2d5b0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2d5c0 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
2d5d0 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2d5e0 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2d5f0 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2d600 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2d610 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2d620 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2d630 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2d640 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2d650 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2d660 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
2d670 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
2d680 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2d690 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
2d6a0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2d6b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2d6c0 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
2d6d0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2d6e0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2d6f0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2d700 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2d710 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2d720 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
2d730 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2d740 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2d750 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
2d760 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
2d770 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2d780 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2d790 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
2d7a0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
2d7b0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2d7c0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2d7d0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2d7e0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2d7f0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2d800 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
2d810 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2d820 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
2d830 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2d840 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2d850 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2d860 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
2d870 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2d880 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2d890 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2d8a0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2d8b0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2d8c0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
2d8d0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2d8e0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2d8f0 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
2d900 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2d910 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2d920 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2d930 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2d940 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2d950 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2d960 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2d970 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2d980 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2d990 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2d9a0 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
2d9b0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2d9c0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2d9d0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2d9e0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2d9f0 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2da00 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2da10 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
2da20 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
2da30 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  k P1 P2 P3 P4 P5
2da40 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
2da50 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
2da60 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
2da70 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
2da80 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
2da90 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
2daa0 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
2dab0 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
2dac0 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
2dad0 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
2dae0 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
2daf0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2db00 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
2db10 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  r P3 contains th
2db20 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
2db30 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
2db40 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
2db50 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
2db60 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
2db70 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
2db80 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
2db90 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
2dba0 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
2dbb0 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
2dbc0 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
2dbd0 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
2dbe0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
2dbf0 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
2dc00 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2dc10 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
2dc20 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2dc30 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a   are integers.**
2dc40 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e   stored in P4_IN
2dc50 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e  TARRAY argument.
2dc60 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
2dc70 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
2dc80 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
2dc90 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
2dca0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
2dcb0 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
2dcc0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
2dcd0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
2dce0 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
2dcf0 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
2dd00 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
2dd10 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
2dd20 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
2dd30 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
2dd40 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
2dd50 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
2dd60 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
2dd70 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
2dd80 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
2dd90 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
2dda0 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
2ddb0 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
2ddc0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
2ddd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
2dde0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
2ddf0 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
2de00 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
2de10 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
2de20 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
2de30 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2de40 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
2de50 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2de60 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
2de70 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
2de80 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
2de90 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70  2;.  aRoot = pOp
2dea0 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72  ->p4.ai;.  asser
2deb0 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
2dec0 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 6e 52  assert( aRoot[nR
2ded0 6f 6f 74 5d 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oot]==0 );.  ass
2dee0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2def0 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
2df00 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
2df10 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  or) );.  pnErr =
2df20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2df30 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2df40 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  r->flags & MEM_I
2df50 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  nt)!=0 );.  asse
2df60 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
2df70 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2df80 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
2df90 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2dfa0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2dfb0 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
2dfc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2dfd0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2dfe0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
2dff0 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2e000 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
2e010 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
2e020 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
2e030 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e050 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
2e060 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
2e070 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d  ;.  pnErr->u.i -
2e080 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65  = nErr;.  sqlite
2e090 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2e0a0 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
2e0b0 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
2e0c0 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
2e0d0 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
2e0e0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2e0f0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
2e100 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
2e110 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
2e120 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
2e130 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
2e140 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2e150 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
2e160 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2e170 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
2e180 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2e190 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2e1a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2e1b0 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
2e1c0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2e1d0 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
2e1e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f  ** Synopsis:  ro
2e1f0 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
2e200 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
2e210 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
2e220 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
2e230 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e  2 into a boolean
2e240 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69   index.** held i
2e250 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
2e260 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
2e270 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
2e280 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
2e290 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2e2a0 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
2e2b0 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
2e2c0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2e2d0 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
2e2e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2e2f0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
2e300 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
2e310 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
2e320 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2e330 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2e340 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2e350 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2e360 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2e370 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2e380 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2e390 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c  o_mem;.  }.  sql
2e3a0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2e3b0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2e3c0 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn2->u.i);.  
2e3d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e3e0 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20  ode: RowSetRead 
2e3f0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2e400 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
2e410 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
2e420 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
2e430 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
2e440 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  m boolean index 
2e450 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74 20  P1 and put that 
2e460 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  value into.** re
2e470 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20  gister P3.  Or, 
2e480 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  if boolean index
2e490 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79   P1 is initially
2e4a0 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33   empty, leave P3
2e4b0 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e  .** unchanged an
2e4c0 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  d jump to instru
2e4d0 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ction P2..*/.cas
2e4e0 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a  e OP_RowSetRead:
2e4f0 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
2e500 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in1, out3 */. 
2e510 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e   i64 val;..  pIn
2e520 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2e530 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
2e540 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2e550 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  Set)==0 .   || s
2e560 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
2e570 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2e580 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a  , &val)==0.  ){.
2e590 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65      /* The boole
2e5a0 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  an index is empt
2e5b0 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  y */.    sqlite3
2e5c0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2e5d0 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72  In1);.    VdbeBr
2e5e0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
2e5f0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
2e600 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
2e610 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
2e620 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76  else{.    /* A v
2e630 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20  alue was pulled 
2e640 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a  from the index *
2e650 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  /.    VdbeBranch
2e660 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20  Taken(0,2);.    
2e670 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2e680 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
2e690 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d  ->p3], val);.  }
2e6a0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
2e6b0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
2e6c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2e6d0 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50  tTest P1 P2 P3 P
2e6e0 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
2e6f0 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65  f r[P3] in rowse
2e700 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  t(P1) goto P2.**
2e710 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20  .** Register P3 
2e720 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f  is assumed to ho
2e730 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ld a 64-bit inte
2e740 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65  ger value. If re
2e750 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e  gister P1.** con
2e760 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f  tains a RowSet o
2e770 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52  bject and that R
2e780 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e  owSet object con
2e790 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c  tains.** the val
2e7a0 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a  ue held in P3, j
2e7b0 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20  ump to register 
2e7c0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  P2. Otherwise, i
2e7d0 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74  nsert the.** int
2e7e0 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20  eger in P3 into 
2e7f0 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63  the RowSet and c
2e800 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68  ontinue on to th
2e810 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65  e.** next opcode
2e820 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53  ..**.** The RowS
2e830 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74  et object is opt
2e840 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63  imized for the c
2e850 61 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73  ase where succes
2e860 73 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20  sive sets.** of 
2e870 69 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20  integers, where 
2e880 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e  each set contain
2e890 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e  s no duplicates.
2e8a0 20 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20   Each set.** of 
2e8b0 76 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69  values is identi
2e8c0 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65  fied by a unique
2e8d0 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66   P4 value. The f
2e8e0 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74  irst set.** must
2e8f0 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65   have P4==0, the
2e900 20 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31   final set P4=-1
2e910 2e 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69  .  P4 must be ei
2e920 74 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f  ther -1 or.** no
2e930 6e 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72  n-negative.  For
2e940 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
2e950 6c 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20  lues of P4 only 
2e960 74 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62  the lower 4.** b
2e970 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
2e980 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ant..**.** This 
2e990 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74  allows optimizat
2e9a0 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50  ions: (a) when P
2e9b0 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f  4==0 there is no
2e9c0 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a   need to test.**
2e9d0 20 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65   the rowset obje
2e9e0 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74  ct for P3, as it
2e9f0 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e   is guaranteed n
2ea00 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74  ot to contain it
2ea10 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34  ,.** (b) when P4
2ea20 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f  ==-1 there is no
2ea30 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20   need to insert 
2ea40 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74  the value, as it
2ea50 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62   will.** never b
2ea60 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e  e tested for, an
2ea70 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c  d (c) when a val
2ea80 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20  ue that is part 
2ea90 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69  of set X is.** i
2eaa0 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69  nserted, there i
2eab0 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61  s no need to sea
2eac0 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68  rch to see if th
2ead0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73  e same value was
2eae0 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69  .** previously i
2eaf0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2eb00 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69  of set X (only i
2eb10 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75  f it was previou
2eb20 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20  sly.** inserted 
2eb30 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20  as part of some 
2eb40 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63  other set)..*/.c
2eb50 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73  ase OP_RowSetTes
2eb60 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
2eb70 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2eb80 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
2eb90 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20  int iSet;.  int 
2eba0 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20  exists;..  pIn1 
2ebb0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2ebc0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
2ebd0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65  [pOp->p3];.  iSe
2ebe0 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  t = pOp->p4.i;. 
2ebf0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
2ec00 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
2ec10 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69  .  /* If there i
2ec20 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  s anything other
2ec30 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f   than a rowset o
2ec40 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20  bject in memory 
2ec50 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65  cell P1,.  ** de
2ec60 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20  lete it now and 
2ec70 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69  initialize P1 wi
2ec80 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73  th an empty rows
2ec90 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  et.  */.  if( (p
2eca0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2ecb0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20  _RowSet)==0 ){. 
2ecc0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ecd0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
2ece0 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
2ecf0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
2ed00 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  Set)==0 ) goto n
2ed10 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73  o_mem;.  }..  as
2ed20 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2ed30 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
2ed40 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
2ed50 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
2ed60 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
2ed70 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
2ed80 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e  e3RowSetTest(pIn
2ed90 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53  1->u.pRowSet, iS
2eda0 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2edb0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2edc0 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
2edd0 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
2ede0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2edf0 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53  p2;.  }.  if( iS
2ee00 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
2ee10 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
2ee20 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2ee30 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
2ee40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
2ee50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ee60 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
2ee70 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
2ee80 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2ee90 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
2eea0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
2eeb0 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
2eec0 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
2eed0 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
2eee0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2eef0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
2ef00 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
2ef10 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
2ef20 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
2ef30 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
2ef40 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
2ef50 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
2ef60 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
2ef70 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2ef80 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2ef90 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
2efa0 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
2efb0 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
2efc0 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
2efd0 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
2efe0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
2eff0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
2f000 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
2f010 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
2f020 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
2f030 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
2f040 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
2f050 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
2f060 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
2f070 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
2f080 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
2f090 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
2f0a0 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
2f0b0 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
2f0c0 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
2f0d0 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
2f0e0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
2f0f0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
2f100 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
2f110 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
2f120 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
2f130 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2f140 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
2f150 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
2f160 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2f170 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
2f180 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f190 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
2f1a0 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
2f1b0 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
2f1c0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
2f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f1e0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
2f1f0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
2f200 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
2f210 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
2f220 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
2f230 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
2f240 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
2f250 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
2f260 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
2f270 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
2f280 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
2f290 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
2f2a0 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
2f2b0 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
2f2c0 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
2f2d0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
2f2e0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
2f2f0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
2f300 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
2f310 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
2f320 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
2f330 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
2f340 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
2f350 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
2f360 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2f370 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
2f380 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
2f390 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
2f3a0 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
2f3b0 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
2f3c0 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2f3d0 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
2f3e0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
2f3f0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
2f400 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
2f410 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
2f420 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
2f430 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
2f440 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
2f450 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
2f460 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
2f470 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
2f480 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
2f490 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
2f4a0 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
2f4b0 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
2f4c0 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
2f4d0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
2f4e0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
2f4f0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
2f500 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
2f510 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
2f520 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
2f530 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
2f540 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
2f550 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
2f560 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
2f570 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
2f580 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
2f590 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
2f5a0 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
2f5b0 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
2f5c0 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
2f5d0 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
2f5e0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
2f5f0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
2f600 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
2f610 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
2f620 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
2f630 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
2f640 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
2f650 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
2f660 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2f670 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
2f680 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
2f690 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
2f6a0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
2f6b0 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
2f6c0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
2f6d0 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
2f6e0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
2f6f0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
2f700 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
2f710 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
2f720 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
2f730 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
2f740 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
2f750 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74  rsion");.    got
2f760 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2f770 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
2f780 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
2f790 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
2f7a0 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
2f7b0 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
2f7c0 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
2f7d0 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
2f7e0 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
2f7f0 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
2f800 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
2f810 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
2f820 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
2f830 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
2f840 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
2f850 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
2f860 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
2f870 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
2f880 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
2f890 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
2f8a0 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
2f8b0 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20  M_Frame)==0 ){. 
2f8c0 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
2f8d0 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
2f8e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
2f8f0 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
2f900 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
2f910 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
2f920 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
2f930 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
2f940 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
2f950 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
2f960 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
2f970 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
2f980 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
2f990 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
2f9a0 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
2f9b0 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
2f9c0 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
2f9d0 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
2f9e0 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
2f9f0 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
2fa00 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2fa10 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20   assert( nMem>0 
2fa20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67  );.    if( pProg
2fa30 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e  ram->nCsr==0 ) n
2fa40 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65  Mem++;.    nByte
2fa50 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
2fa60 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
2fa70 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
2fa80 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
2faa0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
2fab0 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
2fac0 6f 72 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20  or *).          
2fad0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
2fae0 6e 4f 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75  nOnce * sizeof(u
2faf0 38 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  8);.    pFrame =
2fb00 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
2fb10 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
2fb20 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
2fb30 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
2fb40 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
2fb50 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2fb60 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
2fb70 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
2fb80 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
2fb90 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
2fba0 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
2fbb0 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
2fbc0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
2fbd0 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
2fbe0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
2fbf0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
2fc00 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
2fc10 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
2fc20 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
2fc30 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
2fc40 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
2fc50 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
2fc60 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
2fc70 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
2fc80 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
2fc90 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
2fca0 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
2fcb0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2fcc0 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
2fcd0 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
2fce0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2fcf0 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  n;.    pFrame->a
2fd00 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f  OnceFlag = p->aO
2fd10 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72  nceFlag;.    pFr
2fd20 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d  ame->nOnceFlag =
2fd30 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23   p->nOnceFlag;.#
2fd40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2fd50 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2fd60 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
2fd70 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
2fd80 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ec;.#endif..    
2fd90 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
2fda0 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
2fdb0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
2fdc0 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
2fdd0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
2fde0 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
2fdf0 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
2fe00 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
2fe10 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
2fe20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
2fe30 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2fe40 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
2fe50 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
2fe60 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
2fe70 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
2fe80 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
2fe90 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20  ChildMem .      
2fea0 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e    || (pProgram->
2feb0 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67  nCsr==0 && pProg
2fec0 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72  ram->nMem+1==pFr
2fed0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20  ame->nChildMem) 
2fee0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2fef0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
2ff00 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2ff10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2ff20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
2ff30 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
2ff40 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
2ff50 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
2ff60 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
2ff70 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
2ff80 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
2ff90 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43  id;.  pFrame->nC
2ffa0 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e  hange = p->nChan
2ffb0 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44  ge;.  pFrame->nD
2ffc0 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d  bChange = p->db-
2ffd0 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65  >nChange;.  asse
2ffe0 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75 78  rt( pFrame->pAux
2fff0 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72  Data==0 );.  pFr
30000 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20  ame->pAuxData = 
30010 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20 70  p->pAuxData;.  p
30020 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b 0a  ->pAuxData = 0;.
30030 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
30040 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20  ;.  p->pFrame = 
30050 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65  pFrame;.  p->aMe
30060 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65 46  m = aMem = VdbeF
30070 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
30080 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72  .  p->nMem = pFr
30090 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a  ame->nChildMem;.
300a0 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28    p->nCursor = (
300b0 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69  u16)pFrame->nChi
300c0 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73  ldCsr;.  p->apCs
300d0 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20  r = (VdbeCursor 
300e0 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  **)&aMem[p->nMem
300f0 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f  ];.  p->aOp = aO
30100 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f  p = pProgram->aO
30110 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50  p;.  p->nOp = pP
30120 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70  rogram->nOp;.  p
30130 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75  ->aOnceFlag = (u
30140 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d  8 *)&p->apCsr[p-
30150 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e  >nCursor];.  p->
30160 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f  nOnceFlag = pPro
30170 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66  gram->nOnce;.#if
30180 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
30190 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
301a0 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20  S.  p->anExec = 
301b0 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20  0;.#endif.  pOp 
301c0 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 6d 65  = &aOp[-1];.  me
301d0 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61  mset(p->aOnceFla
301e0 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c  g, 0, p->nOnceFl
301f0 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  ag);..  break;.}
30200 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
30210 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
30220 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
30230 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
30240 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
30250 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
30260 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
30270 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
30280 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
30290 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
302a0 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
302b0 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
302c0 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
302d0 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
302e0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
302f0 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
30300 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
30310 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
30320 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
30330 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
30340 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
30350 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
30360 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
30370 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
30380 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
30390 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
303a0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
303b0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
303c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
303d0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
303e0 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
303f0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
30400 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
30410 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
30420 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
30430 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
30440 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
30450 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
30460 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
30470 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
30480 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70  rame;.  pIn = &p
30490 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
304a0 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f  >p1 + pFrame->aO
304b0 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31  p[pFrame->pc].p1
304c0 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56  ];   .  sqlite3V
304d0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
304e0 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d  y(pOut, pIn, MEM
304f0 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b  _Ephem);.  break
30500 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23  ;.}..#endif /* #
30510 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30520 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23  IT_TRIGGER */..#
30530 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30540 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f  IT_FOREIGN_KEY./
30550 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e  * Opcode: FkCoun
30560 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ter P1 P2 * * *.
30570 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63  ** Synopsis: fkc
30580 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a  tr[P1]+=P2.**.**
30590 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
305a0 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
305b0 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
305c0 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
305d0 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
305e0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
305f0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
30600 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
30610 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
30620 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
30630 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
30640 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
30650 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
30660 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
30670 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
30680 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
30690 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
306a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
306b0 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
306c0 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d  ter: {.  if( db-
306d0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
306e0 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20  DeferFKs ){.    
306f0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
30700 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
30710 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
30720 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
30730 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
30740 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
30750 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
30760 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
30770 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
30780 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
30790 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
307a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
307b0 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30   if fkctr[P1]==0
307c0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
307d0 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73  his opcode tests
307e0 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65   if a foreign ke
307f0 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  y constraint-cou
30800 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
30810 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f  y zero..** If so
30820 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
30830 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
30840 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
30850 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a  h to the next .*
30860 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
30870 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
30880 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
30890 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
308a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
308b0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
308c0 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68  r.** is zero (th
308d0 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74  e one that count
308e0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
308f0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
30900 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a  ). If P1 is.** z
30910 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73  ero, the jump is
30920 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74   taken if the st
30930 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69  atement constrai
30940 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65  nt-counter is ze
30950 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65  ro.** (immediate
30960 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
30970 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
30980 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ns)..*/.case OP_
30990 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  FkIfZero: {     
309a0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
309b0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
309c0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
309d0 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65  ken(db->nDeferre
309e0 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
309f0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
30a00 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
30a10 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
30a20 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
30a30 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
30a40 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
30a50 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
30a60 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
30a70 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
30a80 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
30a90 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
30aa0 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
30ab0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
30ac0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
30ad0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
30ae0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
30af0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
30b00 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
30b10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
30b20 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e  IGN_KEY */..#ifn
30b30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30b40 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a  AUTOINCREMENT./*
30b50 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20   Opcode: MemMax 
30b60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
30b70 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d  ynopsis: r[P1]=m
30b80 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a  ax(r[P1],r[P2]).
30b90 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65  **.** P1 is a re
30ba0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
30bb0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
30bc0 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72   VM (the root fr
30bd0 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72  ame is.** differ
30be0 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ent from the cur
30bf0 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68  rent frame if th
30c00 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
30c10 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
30c20 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62  .** within a sub
30c30 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74  -program). Set t
30c40 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
30c50 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
30c60 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74  aximum of .** it
30c70 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
30c80 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
30c90 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
30ca0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
30cb0 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
30cc0 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
30cd0 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
30ce0 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
30cf0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
30d00 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
30d10 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
30d20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
30d30 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  e;.  if( p->pFra
30d40 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46  me ){.    for(pF
30d50 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
30d60 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
30d70 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
30d80 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49  pParent);.    pI
30d90 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  n1 = &pFrame->aM
30da0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
30db0 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d  else{.    pIn1 =
30dc0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
30dd0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d  .  }.  assert( m
30de0 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
30df0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
30e00 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
30e10 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
30e20 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
30e30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
30e40 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
30e50 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
30e60 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20  pIn2->u.i){.    
30e70 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32  pIn1->u.i = pIn2
30e80 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65  ->u.i;.  }.  bre
30e90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30ea0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
30eb0 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a  INCREMENT */../*
30ec0 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50   Opcode: IfPos P
30ed0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
30ee0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
30ef0 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d  ]>0 then r[P1]-=
30f00 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3, goto P2.**.*
30f10 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
30f20 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
30f30 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65  teger..** If the
30f40 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
30f50 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
30f60 65 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20  eater, subtract 
30f70 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76  P3 from the.** v
30f80 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a  alue in P1 and j
30f90 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
30fa0 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20   If the initial 
30fb0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
30fc0 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
30fd0 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  n 1, then the.**
30fe0 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e   value is unchan
30ff0 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20  ged and control 
31000 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74  passes through t
31010 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
31020 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
31030 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
31040 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
31050 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
31060 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
31070 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
31080 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
31090 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
310a0 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
310b0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
310c0 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  >0 ){.    pIn1->
310d0 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a  u.i -= pOp->p3;.
310e0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
310f0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
31100 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
31110 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50  OffsetLimit P1 P
31120 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
31130 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
31140 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31   then r[P2]=r[P1
31150 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65  ]+max(0,r[P3]) e
31160 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a  lse r[P2]=(-1).*
31170 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
31180 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d   performs a comm
31190 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74  only used comput
311a0 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ation associated
311b0 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61   with.** LIMIT a
311c0 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73  nd OFFSET proces
311d0 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20  s.  r[P1] holds 
311e0 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65  the limit counte
311f0 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c  r.  r[P3].** hol
31200 64 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f  ds the offset co
31210 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f  unter.  The opco
31220 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  de computes the 
31230 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a  combined value.*
31240 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61  * of the LIMIT a
31250 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74  nd OFFSET and st
31260 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20  ores that value 
31270 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72  in r[P2].  The r
31280 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f  [P2].** value co
31290 6d 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f  mputed is the to
312a0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
312b0 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65  ws that will nee
312c0 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74  d to be.** visit
312d0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ed in order to c
312e0 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72  omplete the quer
312f0 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33  y..**.** If r[P3
31300 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67  ] is zero or neg
31310 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e  ative, that mean
31320 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46  s there is no OF
31330 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32  FSET.** and r[P2
31340 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74  ] is set to be t
31350 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
31360 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a  LIMIT, r[P1]..**
31370 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20  .** if r[P1] is 
31380 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65  zero or negative
31390 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
313a0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a  re is no LIMIT.*
313b0 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
313c0 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a  et to -1. .**.**
313d0 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32   Otherwise, r[P2
313e0 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  ] is set to the 
313f0 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64  sum of r[P1] and
31400 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20   r[P3]..*/.case 
31410 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20  OP_OffsetLimit: 
31420 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74  {    /* in1, out
31430 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 31  2, in3 */.  pIn1
31440 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
31450 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
31460 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f  m[pOp->p3];.  pO
31470 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
31480 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
31490 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
314a0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
314b0 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
314c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
314d0 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
314e0 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30 20 3f 20   pIn1->u.i<=0 ? 
314f0 2d 31 20 3a 20 70 49 6e 31 2d 3e 75 2e 69 2b 28  -1 : pIn1->u.i+(
31500 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33  pIn3->u.i>0?pIn3
31510 2d 3e 75 2e 69 3a 30 29 3b 0a 20 20 62 72 65 61  ->u.i:0);.  brea
31520 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31530 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32   IfNotZero P1 P2
31540 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
31550 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
31560 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
31570 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
31580 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
31590 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
315a0 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  er.  If the cont
315b0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
315c0 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c  P1 is.** initial
315d0 6c 79 20 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e  ly nonzero, then
315e0 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
315f0 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
31600 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 0a 2a  egister P1 and.*
31610 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49  * jump to P2.  I
31620 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
31630 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c   initially zero,
31640 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e   leave it unchan
31650 67 65 64 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20  ged.** and fall 
31660 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
31670 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
31680 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
31690 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
316a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
316b0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
316c0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
316d0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
316e0 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
316f0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
31700 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 70 49 6e  >u.i ){.     pIn
31710 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70  1->u.i -= pOp->p
31720 33 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  3;.     goto jum
31730 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
31740 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
31750 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f  de: DecrJumpZero
31760 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
31770 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d  Synopsis: if (--
31780 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50  r[P1])==0 goto P
31790 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
317a0 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e   P1 must hold an
317b0 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65   integer.  Decre
317c0 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
317d0 6e 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  n register P1.**
317e0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
317f0 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
31800 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72  e is exactly zer
31810 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  o..*/.case OP_De
31820 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20  crJumpZero: {   
31830 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
31840 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
31850 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
31860 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
31870 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  s&MEM_Int );.  p
31880 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
31890 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
318a0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
318b0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
318c0 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
318d0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
318e0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  .../* Opcode: Ag
318f0 67 53 74 65 70 30 20 2a 20 50 32 20 50 33 20 50  gStep0 * P2 P3 P
31900 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
31910 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
31920 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
31930 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
31940 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
31950 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
31960 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
31970 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
31980 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
31990 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
319a0 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
319b0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
319c0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
319d0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
319e0 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
319f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
31a00 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
31a10 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
31a20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
31a30 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20  ccessors..*/./* 
31a40 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
31a50 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
31a60 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
31a70 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
31a80 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
31a90 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
31aa0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
31ab0 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
31ac0 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
31ad0 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
31ae0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
31af0 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
31b00 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61  xt.** object tha
31b10 74 20 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e  t is used to run
31b20 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
31b30 52 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  Register P3 is.*
31b40 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  * as the accumul
31b50 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
31b60 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
31b70 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
31b80 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
31b90 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
31ba0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
31bb0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f   is initially co
31bc0 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65  ded as OP_AggSte
31bd0 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76  p0.  On first ev
31be0 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65  aluation,.** the
31bf0 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20   FuncDef stored 
31c00 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74  in P4 is convert
31c10 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74  ed into an sqlit
31c20 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a  e3_context and.*
31c30 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20  * the opcode is 
31c40 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69  changed.  In thi
31c50 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69  s way, the initi
31c60 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
31c70 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  .** sqlite3_cont
31c80 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  ext only happens
31c90 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f   once, instead o
31ca0 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74  f on each call t
31cb0 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75  o the.** step fu
31cc0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  nction..*/.case 
31cd0 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20  OP_AggStep0: {. 
31ce0 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65   int n;.  sqlite
31cf0 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b  3_context *pCtx;
31d00 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
31d10 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
31d20 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70  DEF );.  n = pOp
31d30 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
31d40 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
31d50 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
31d60 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
31d70 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ;.  assert( n==0
31d80 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
31d90 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d  & pOp->p2+n<=(p-
31da0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
31db0 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
31dc0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
31dd0 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
31de0 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
31df0 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44   pCtx = sqlite3D
31e00 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c  bMallocRawNN(db,
31e10 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b   sizeof(*pCtx) +
31e20 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71   (n-1)*sizeof(sq
31e30 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a  lite3_value*));.
31e40 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20    if( pCtx==0 ) 
31e50 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
31e60 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20  Ctx->pMem = 0;. 
31e70 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
31e80 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
31e90 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
31ea0 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
31eb0 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
31ec0 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
31ed0 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
31ee0 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
31ef0 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
31f00 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pCtx;.  pOp->opc
31f10 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
31f20 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
31f30 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
31f40 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
31f50 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
31f60 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
31f70 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
31f80 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
31f90 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   t;..  assert( p
31fa0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
31fb0 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
31fc0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
31fd0 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
31fe0 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p3];..  /* 
31ff0 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  If this function
32000 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20   is inside of a 
32010 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67  trigger, the reg
32020 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61  ister array in a
32030 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74  Mem[].  ** might
32040 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
32050 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74   evaluation to t
32060 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65  he next.  The ne
32070 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
32080 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  .  ** checks to 
32090 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73  see if the regis
320a0 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68  ter array has ch
320b0 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f  anged, and if so
320c0 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69   it.  ** reiniti
320d0 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76  alizes the relav
320e0 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65  ant parts of the
320f0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
32100 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28   object */.  if(
32110 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70   pCtx->pMem != p
32120 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Mem ){.    pCtx-
32130 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20  >pMem = pMem;.  
32140 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
32150 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
32160 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
32170 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
32180 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  ];.  }..#ifdef S
32190 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
321a0 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
321b0 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
321c0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
321d0 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
321e0 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
321f0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
32200 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
32210 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
32220 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c  pMem->n++;.  sql
32230 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28  ite3VdbeMemInit(
32240 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  &t, db, MEM_Null
32250 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  );.  pCtx->pOut 
32260 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45  = &t;.  pCtx->fE
32270 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
32280 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
32290 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46  = 0;.  (pCtx->pF
322a0 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
322b0 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
322c0 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
322d0 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
322e0 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
322f0 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
32300 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
32310 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
32320 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
32330 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
32340 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a  alue_text(&t));.
32350 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d        rc = pCtx-
32360 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  >isError;.    }.
32370 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
32380 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20  emRelease(&t);. 
32390 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
323a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
323b0 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ror;.  }else{.  
323c0 20 20 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67    assert( t.flag
323d0 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
323e0 20 7d 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73   }.  if( pCtx->s
323f0 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
32400 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
32410 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
32420 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
32430 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
32440 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
32450 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
32460 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  m[i], 1);.  }.  
32470 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
32480 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
32490 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
324a0 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
324b0 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
324c0 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
324d0 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
324e0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
324f0 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
32500 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
32510 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
32520 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
32530 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
32540 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
32550 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
32560 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
32570 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
32580 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
32590 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
325a0 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
325b0 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
325c0 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
325d0 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
325e0 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
325f0 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
32600 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
32610 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
32620 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
32630 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
32640 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
32650 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
32660 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
32670 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
32680 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
32690 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
326a0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
326b0 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
326c0 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
326d0 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
326e0 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
326f0 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
32700 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
32710 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
32720 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
32730 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
32740 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
32750 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
32760 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
32770 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
32780 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
32790 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
327a0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
327b0 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
327c0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
327d0 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  m));.    goto ab
327e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
327f0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
32800 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
32810 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
32820 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
32830 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
32840 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
32850 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
32860 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
32870 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
32880 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
32890 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
328a0 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
328b0 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
328c0 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
328d0 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
328e0 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
328f0 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
32900 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
32910 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
32920 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
32930 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
32940 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a  ASSIVE, FULL,.**
32950 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55   RESTART, or TRU
32960 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20  NCATE.  Write 1 
32970 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
32980 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
32990 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
329a0 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
329b0 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
329c0 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
329d0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
329e0 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
329f0 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
32a00 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
32a10 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
32a20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
32a30 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
32a40 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
32a50 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
32a60 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
32a70 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
32a80 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
32a90 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
32aa0 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
32ab0 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
32ac0 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
32ad0 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
32ae0 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b00 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
32b10 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
32b20 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
32b30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
32b40 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
32b50 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
32b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
32b70 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
32b80 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
32b90 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
32ba0 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
32bb0 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
32bc0 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
32bd0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
32be0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
32bf0 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
32c00 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
32c10 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
32c20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
32c30 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
32c40 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20  OINT_RESTART.   
32c50 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
32c60 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
32c70 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a  T_TRUNCATE.  );.
32c80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
32c90 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
32ca0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
32cb0 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
32cc0 5d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ]);.  if( rc ){.
32cd0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
32ce0 54 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61  TE_BUSY ) goto a
32cf0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
32d00 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  r;.    rc = SQLI
32d10 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
32d20 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
32d30 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
32d40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
32d50 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
32d60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
32d70 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
32d80 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
32d90 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
32da0 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
32db0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
32dc0 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
32dd0 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
32de0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
32df0 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
32e00 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
32e10 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
32e20 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
32e30 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
32e40 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
32e50 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
32e60 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
32e70 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
32e80 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
32e90 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
32ea0 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
32eb0 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
32ec0 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
32ed0 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
32ee0 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
32ef0 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
32f00 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
32f10 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
32f20 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
32f30 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
32f40 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
32f50 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
32f60 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
32f70 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
32f80 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
32f90 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
32fa0 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  t2 */.  Btree *p
32fb0 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
32fc0 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
32fd0 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
32fe0 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
32ff0 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
33000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33010 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
33020 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
33030 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
33040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33050 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
33060 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
33070 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
33080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
33090 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
330a0 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
330b0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
330c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
330d0 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
330e0 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
330f0 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
33100 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
33110 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
33120 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
33130 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
33140 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
33150 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33160 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
33170 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
33180 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
33190 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
331a0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
331b0 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
331c0 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
331d0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
331e0 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
331f0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
33200 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
33210 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
33220 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33230 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
33240 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
33250 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
33260 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
33270 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
33280 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
33290 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
332a0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
332b0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
332c0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
332d0 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
332e0 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
332f0 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
33300 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
33310 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
33320 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
33330 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
33340 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
33350 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
33360 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
33370 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
33380 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
33390 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
333a0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
333b0 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
333c0 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
333d0 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
333e0 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
333f0 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
33400 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
33410 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
33420 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
33430 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
33440 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
33450 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
33460 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
33470 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33480 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
33490 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
334a0 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
334b0 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
334c0 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
334d0 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
334e0 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
334f0 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
33500 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
33510 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
33520 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
33530 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
33540 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
33550 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
33560 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
33570 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
33580 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
33590 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
335a0 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
335b0 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
335c0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
335d0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
335e0 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
335f0 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
33600 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
33610 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
33620 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
33630 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
33640 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
33650 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
33660 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
33670 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
33680 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
33690 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
336a0 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
336b0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
336c0 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
336d0 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
336e0 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
336f0 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
33700 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
33710 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
33720 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
33730 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
33740 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
33750 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
33760 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
33770 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
33780 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
33790 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
337a0 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
337b0 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
337c0 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
337d0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
337e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
337f0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
33800 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  ger);.        if
33810 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
33820 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
33830 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
33840 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
33850 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d  eNew);.        }
33860 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
33870 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55   eOld==PAGER_JOU
33880 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20  RNALMODE_MEMORY 
33890 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61  ){.        /* Ca
338a0 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20  nnot transition 
338b0 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45  directly from ME
338c0 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73  MORY to WAL.  Us
338d0 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20  e mode OFF.     
338e0 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65     ** as an inte
338f0 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20  rmediate */.    
33900 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
33910 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
33920 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55  Pager, PAGER_JOU
33930 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20  RNALMODE_OFF);. 
33940 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
33950 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61  /* Open a transa
33960 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74  ction on the dat
33970 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61  abase file. Rega
33980 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f  rdless of the jo
33990 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d  urnal.      ** m
339a0 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61  ode, this transa
339b0 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65  ction always use
339c0 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  s a rollback jou
339d0 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  rnal..      */. 
339e0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
339f0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
33a00 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20  ns(pBt)==0 );.  
33a10 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
33a20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
33a30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
33a40 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74  eeSetVersion(pBt
33a50 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  , (eNew==PAGER_J
33a60 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
33a70 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20   2 : 1));.      
33a80 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  }.    }.  }.#end
33a90 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c  if /* ifndef SQL
33aa0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
33ab0 0a 20 20 69 66 28 20 72 63 20 29 20 65 4e 65 77  .  if( rc ) eNew
33ac0 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20   = eOld;.  eNew 
33ad0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  = sqlite3PagerSe
33ae0 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
33af0 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70  ger, eNew);..  p
33b00 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
33b10 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
33b20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
33b30 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71  ->z = (char *)sq
33b40 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
33b50 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f  name(eNew);.  pO
33b60 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53  ut->n = sqlite3S
33b70 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29  trlen30(pOut->z)
33b80 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
33b90 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73  SQLITE_UTF8;.  s
33ba0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
33bb0 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
33bc0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20  ncoding);.  if( 
33bd0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
33be0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
33bf0 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
33c00 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
33c10 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
33c20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
33c30 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
33c40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
33c50 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
33c60 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
33c70 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
33c80 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
33c90 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
33ca0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
33cb0 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
33cc0 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
33cd0 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
33ce0 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
33cf0 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
33d00 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
33d10 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
33d20 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
33d30 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
33d40 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
33d50 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
33d60 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
33d70 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
33d80 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
33d90 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
33da0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
33db0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
33dc0 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a  T_AUTOVACUUM)./*
33dd0 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63   Opcode: IncrVac
33de0 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  uum P1 P2 * * *.
33df0 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20  **.** Perform a 
33e00 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74  single step of t
33e10 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  he incremental v
33e20 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20  acuum procedure 
33e30 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74  on.** the P1 dat
33e40 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61  abase. If the va
33e50 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65  cuum has finishe
33e60 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  d, jump to instr
33e70 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74  uction.** P2. Ot
33e80 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
33e90 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
33ea0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
33eb0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61  /.case OP_IncrVa
33ec0 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  cuum: {        /
33ed0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65  * jump */.  Btre
33ee0 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
33ef0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
33f00 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
33f10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
33f20 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
33f30 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
33f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
33f50 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
33f60 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
33f70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72  Op->p1].pBt;.  r
33f80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
33f90 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b  IncrVacuum(pBt);
33fa0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
33fb0 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  en(rc==SQLITE_DO
33fc0 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  NE,2);.  if( rc 
33fd0 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  ){.    if( rc!=S
33fe0 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74  QLITE_DONE ) got
33ff0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34000 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53  rror;.    rc = S
34010 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f  QLITE_OK;.    go
34020 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
34030 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
34040 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
34050 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a   Expire P1 * * *
34060 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70   *.**.** Cause p
34070 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65  recompiled state
34080 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e  ments to expire.
34090 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65    When an expire
340a0 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69  d statement.** i
340b0 73 20 65 78 65 63 75 74 65 64 20 75 73 69 6e 67  s executed using
340c0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
340d0 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61  it will either a
340e0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20  utomatically.** 
340f0 72 65 70 72 65 70 61 72 65 20 69 74 73 65 6c 66  reprepare itself
34100 20 28 69 66 20 69 74 20 77 61 73 20 6f 72 69 67   (if it was orig
34110 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75  inally created u
34120 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
34130 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72  pare_v2()).** or
34140 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69   it will fail wi
34150 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  th SQLITE_SCHEMA
34160 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69  ..** .** If P1 i
34170 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51  s 0, then all SQ
34180 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63  L statements bec
34190 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49 66 20  ome expired. If 
341a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a  P1 is non-zero,.
341b0 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  ** then only the
341c0 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75   currently execu
341d0 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69  ting statement i
341e0 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61  s expired..*/.ca
341f0 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
34200 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29    if( !pOp->p1 )
34210 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  {.    sqlite3Exp
34220 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
34230 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c  ments(db);.  }el
34240 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  se{.    p->expir
34250 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  ed = 1;.  }.  br
34260 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
34270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
34280 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f  ED_CACHE./* Opco
34290 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31  de: TableLock P1
342a0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
342b0 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20  ynopsis: iDb=P1 
342c0 72 6f 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33  root=P2 write=P3
342d0 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20  .**.** Obtain a 
342e0 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63  lock on a partic
342f0 75 6c 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73  ular table. This
34300 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
34310 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a  only used when.*
34320 2a 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  * the shared-cac
34330 68 65 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  he feature is en
34340 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  abled. .**.** P1
34350 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
34360 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
34370 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
34380 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
34390 2a 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c  * on which the l
343a0 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e  ock is acquired.
343b0 20 20 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20    A readlock is 
343c0 6f 62 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d  obtained if P3==
343d0 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20  0 or.** a write 
343e0 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a  lock if P3==1..*
343f0 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73  *.** P2 contains
34400 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f   the root-page o
34410 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c  f the table to l
34420 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f  ock..**.** P4 co
34430 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
34440 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   to the name of 
34450 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
34460 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20  locked. This is 
34470 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20  only.** used to 
34480 67 65 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f  generate an erro
34490 72 20 6d 65 73 73 61 67 65 20 69 66 20 74 68 65  r message if the
344a0 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20   lock cannot be 
344b0 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73  obtained..*/.cas
344c0 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20  e OP_TableLock: 
344d0 7b 0a 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f  {.  u8 isWriteLo
344e0 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33  ck = (u8)pOp->p3
344f0 3b 0a 20 20 69 66 28 20 69 73 57 72 69 74 65 4c  ;.  if( isWriteL
34500 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66  ock || 0==(db->f
34510 6c 61 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64  lags&SQLITE_Read
34520 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a  Uncommitted) ){.
34530 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70      int p1 = pOp
34540 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72  ->p1; .    asser
34550 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64  t( p1>=0 && p1<d
34560 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73  b->nDb );.    as
34570 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
34580 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
34590 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  1) );.    assert
345a0 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30  ( isWriteLock==0
345b0 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d   || isWriteLock=
345c0 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =1 );.    rc = s
345d0 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54  qlite3BtreeLockT
345e0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d  able(db->aDb[p1]
345f0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69  .pBt, pOp->p2, i
34600 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20  sWriteLock);.   
34610 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20   if( rc ){.     
34620 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d   if( (rc&0xFF)==
34630 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b  SQLITE_LOCKED ){
34640 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63  .        const c
34650 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34  har *z = pOp->p4
34660 2e 7a 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  .z;.        sqli
34670 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
34680 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20  "database table 
34690 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20  is locked: %s", 
346a0 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  z);.      }.    
346b0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
346c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
346d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
346e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
346f0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
34700 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
34710 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
34720 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
34730 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
34740 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
34750 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
34760 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
34770 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
34780 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
34790 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
347a0 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
347b0 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
347c0 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
347d0 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
347e0 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
347f0 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
34800 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
34810 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
34820 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
34830 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
34840 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  the error.** cod
34850 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  e will be set to
34860 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a   SQLITE_LOCKED..
34870 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69  */.case OP_VBegi
34880 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70  n: {.  VTable *p
34890 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20  VTab;.  pVTab = 
348a0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
348b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
348c0 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62  bBegin(db, pVTab
348d0 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29  );.  if( pVTab )
348e0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
348f0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61  rtErrmsg(p, pVTa
34900 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 69 66 28  b->pVtab);.  if(
34910 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
34920 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34930 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34940 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
34950 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
34960 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34970 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34980 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72  E./* Opcode: VCr
34990 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  eate P1 P2 * * *
349a0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72  .**.** P2 is a r
349b0 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c  egister that hol
349c0 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ds the name of a
349d0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
349e0 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50  n database .** P
349f0 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65  1. Call the xCre
34a00 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  ate method for t
34a10 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
34a20 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b  se OP_VCreate: {
34a30 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
34a40 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
34a50 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
34a60 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
34a70 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
34a80 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  Tab;  /* Name of
34a90 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
34aa0 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28  le */..  memset(
34ab0 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
34ac0 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e  (sMem));.  sMem.
34ad0 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65  db = db;.  /* Be
34ae0 63 61 75 73 65 20 50 32 20 69 73 20 61 6c 77 61  cause P2 is alwa
34af0 79 73 20 61 20 73 74 61 74 69 63 20 73 74 72 69  ys a static stri
34b00 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73  ng, it is imposs
34b10 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a  ible for the.  *
34b20 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
34b30 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a  Copy() to fail *
34b40 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65  /.  assert( (aMe
34b50 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73  m[pOp->p2].flags
34b60 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29   & MEM_Str)!=0 )
34b70 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d 65  ;.  assert( (aMe
34b80 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73  m[pOp->p2].flags
34b90 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d   & MEM_Static)!=
34ba0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
34bb0 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26  te3VdbeMemCopy(&
34bc0 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  sMem, &aMem[pOp-
34bd0 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2]);.  assert(
34be0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
34bf0 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73  ;.  zTab = (cons
34c00 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
34c10 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d  value_text(&sMem
34c20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61  );.  assert( zTa
34c30 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  b || db->mallocF
34c40 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a  ailed );.  if( z
34c50 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  Tab ){.    rc = 
34c60 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
34c70 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70  reate(db, pOp->p
34c80 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72  1, zTab, &p->zEr
34c90 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  rMsg);.  }.  sql
34ca0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
34cb0 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 69 66 28  se(&sMem);.  if(
34cc0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
34cd0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34ce0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34cf0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
34d00 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
34d10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34d20 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34d30 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65  E./* Opcode: VDe
34d40 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20  stroy P1 * * P4 
34d50 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68  *.**.** P4 is th
34d60 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
34d70 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
34d80 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20  abase P1.  Call 
34d90 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74  the xDestroy met
34da0 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  hod.** of that t
34db0 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
34dc0 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64  _VDestroy: {.  d
34dd0 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a  b->nVDestroy++;.
34de0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
34df0 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62  abCallDestroy(db
34e00 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
34e10 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44  p4.z);.  db->nVD
34e20 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 69 66 28 20  estroy--;.  if( 
34e30 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
34e40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
34e50 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
34e60 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
34e70 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
34e80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34e90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34ea0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65  ./* Opcode: VOpe
34eb0 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  n P1 * * P4 *.**
34ec0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
34ed0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
34ee0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
34ef0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
34f00 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20  tructure..** P1 
34f10 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62  is a cursor numb
34f20 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  er.  This opcode
34f30 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20   opens a cursor 
34f40 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  to the virtual.*
34f50 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72  * table and stor
34f60 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20 69  es that cursor i
34f70 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P1..*/.case OP
34f80 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  _VOpen: {.  Vdbe
34f90 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
34fa0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
34fb0 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71  sor *pVCur;.  sq
34fc0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
34fd0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
34fe0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
34ff0 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  le;..  assert( p
35000 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
35010 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 43   pCur = 0;.  pVC
35020 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20  ur = 0;.  pVtab 
35030 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
35040 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56  >pVtab;.  if( pV
35050 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28  tab==0 || NEVER(
35060 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d  pVtab->pModule==
35070 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  0) ){.    rc = S
35080 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
35090 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
350a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
350b0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
350c0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20  ->pModule;.  rc 
350d0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e  = pModule->xOpen
350e0 28 70 56 74 61 62 2c 20 26 70 56 43 75 72 29 3b  (pVtab, &pVCur);
350f0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
35100 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
35110 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29  tab);.  if( rc )
35120 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35130 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20  to_error;..  /* 
35140 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74  Initialize sqlit
35150 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62  e3_vtab_cursor b
35160 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 70  ase class */.  p
35170 56 43 75 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  VCur->pVtab = pV
35180 74 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69  tab;..  /* Initi
35190 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f  alize vdbe curso
351a0 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70 43  r object */.  pC
351b0 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  ur = allocateCur
351c0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
351d0 30 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 56  0, -1, CURTYPE_V
351e0 54 41 42 29 3b 0a 20 20 69 66 28 20 70 43 75 72  TAB);.  if( pCur
351f0 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 75 63   ){.    pCur->uc
35200 2e 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b 0a  .pVCur = pVCur;.
35210 20 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b      pVtab->nRef+
35220 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  +;.  }else{.    
35230 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c  assert( db->mall
35240 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
35250 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
35260 70 56 43 75 72 29 3b 0a 20 20 20 20 67 6f 74 6f  pVCur);.    goto
35270 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
35280 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
35290 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
352a0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
352b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
352c0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
352d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74  /* Opcode: VFilt
352e0 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  er P1 P2 P3 P4 *
352f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70  .** Synopsis: ip
35300 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d  lan=r[P3] zplan=
35310 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  'P4'.**.** P1 is
35320 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64   a cursor opened
35330 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50   using VOpen.  P
35340 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20  2 is an address 
35350 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a  to jump to if.**
35360 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65   the filtered re
35370 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
35380 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65  y..**.** P4 is e
35390 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20  ither NULL or a 
353a0 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20  string that was 
353b0 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
353c0 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d   xBestIndex.** m
353d0 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
353e0 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70  ule.  The interp
353f0 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
35400 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66  P4 string is lef
35410 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75  t.** to the modu
35420 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
35430 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
35440 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
35450 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
35460 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
35470 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a  able specified.*
35480 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e  * by P1.  The in
35490 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e  teger query plan
354a0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46   parameter to xF
354b0 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20  ilter is stored 
354c0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50  in register.** P
354d0 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31  3. Register P3+1
354e0 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63   stores the argc
354f0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65   parameter to be
35500 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a   passed to the.*
35510 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  * xFilter method
35520 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32  . Registers P3+2
35530 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20  ..P3+1+argc are 
35540 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69  the argc.** addi
35550 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72  tional parameter
35560 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73  s which are pass
35570 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72  ed to.** xFilter
35580 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74   as argv. Regist
35590 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20  er P3+2 becomes 
355a0 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73  argv[0] when pas
355b0 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a  sed to xFilter..
355c0 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20  **.** A jump is 
355d0 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68  made to P2 if th
355e0 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74  e result set aft
355f0 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75  er filtering wou
35600 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a  ld be empty..*/.
35610 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a  case OP_VFilter:
35620 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
35630 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e    int nArg;.  in
35640 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73  t iQuery;.  cons
35650 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
35660 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
35670 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20   *pQuery;.  Mem 
35680 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65  *pArgc;.  sqlite
35690 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70  3_vtab_cursor *p
356a0 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  VCur;.  sqlite3_
356b0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56  vtab *pVtab;.  V
356c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
356d0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
356e0 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  t i;.  Mem **apA
356f0 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20  rg;..  pQuery = 
35700 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
35710 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72    pArgc = &pQuer
35720 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70  y[1];.  pCur = p
35730 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
35740 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
35750 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29  sValid(pQuery) )
35760 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
35770 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65  CE(pOp->p3, pQue
35780 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ry);.  assert( p
35790 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
357a0 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
357b0 20 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e 75   pVCur = pCur->u
357c0 63 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61 62  c.pVCur;.  pVtab
357d0 20 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b   = pVCur->pVtab;
357e0 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
357f0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20  ab->pModule;..  
35800 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65  /* Grab the inde
35810 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67  x number and arg
35820 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a  c parameters */.
35830 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72    assert( (pQuer
35840 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  y->flags&MEM_Int
35850 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66  )!=0 && pArgc->f
35860 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
35870 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70  .  nArg = (int)p
35880 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75  Argc->u.i;.  iQu
35890 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72  ery = (int)pQuer
358a0 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e  y->u.i;..  /* In
358b0 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72  voke the xFilter
358c0 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73   method */.  res
358d0 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20   = 0;.  apArg = 
358e0 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28  p->apArg;.  for(
358f0 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69  i = 0; i<nArg; i
35900 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69  ++){.    apArg[i
35910 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b  ] = &pArgc[i+1];
35920 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64  .  }.  rc = pMod
35930 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 43  ule->xFilter(pVC
35940 75 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d  ur, iQuery, pOp-
35950 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41  >p4.z, nArg, apA
35960 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  rg);.  sqlite3Vt
35970 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
35980 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
35990 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
359a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
359b0 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
359c0 45 6f 66 28 70 56 43 75 72 29 3b 0a 20 20 70 43  Eof(pVCur);.  pC
359d0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
359e0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
359f0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
35a00 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
35a10 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
35a20 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35a30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35a40 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35a50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35a60 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35a70 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e   Opcode: VColumn
35a80 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
35a90 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
35aa0 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a  =vcolumn(P2).**.
35ab0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c  ** Store the val
35ac0 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20  ue of the P2-th 
35ad0 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65  column of.** the
35ae0 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74   row of the virt
35af0 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74  ual-table that t
35b00 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72  he .** P1 cursor
35b10 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   is pointing to 
35b20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
35b30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f  ..*/.case OP_VCo
35b40 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65  lumn: {.  sqlite
35b50 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
35b60 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
35b70 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
35b80 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20    Mem *pDest;.  
35b90 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
35ba0 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62  sContext;..  Vdb
35bb0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20  eCursor *pCur = 
35bc0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
35bd0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
35be0 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
35bf0 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61  TYPE_VTAB );.  a
35c00 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
35c10 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
35c20 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
35c30 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
35c40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
35c50 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
35c60 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
35c70 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
35c80 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
35c90 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
35ca0 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72  l(pDest);.    br
35cb0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
35cc0 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75   = pCur->uc.pVCu
35cd0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
35ce0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
35cf0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
35d00 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
35d10 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
35d20 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
35d30 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20  f(sContext));.  
35d40 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20  sContext.pOut = 
35d50 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54  pDest;.  MemSetT
35d60 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d  ypeFlag(pDest, M
35d70 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d  EM_Null);.  rc =
35d80 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
35d90 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  n(pCur->uc.pVCur
35da0 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70  , &sContext, pOp
35db0 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2);.  sqlite3
35dc0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
35dd0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66  (p, pVtab);.  if
35de0 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  ( sContext.isErr
35df0 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  or ){.    rc = s
35e00 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b  Context.isError;
35e10 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
35e20 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
35e30 28 70 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67  (pDest, encoding
35e40 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
35e50 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
35e60 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  st);.  UPDATE_MA
35e70 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
35e80 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
35e90 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
35ea0 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
35eb0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
35ec0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
35ed0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
35ee0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
35ef0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
35f00 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
35f10 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
35f20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35f30 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
35f40 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
35f50 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
35f60 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
35f70 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
35f80 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
35f90 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
35fa0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
35fb0 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
35fc0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
35fd0 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
35fe0 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
35ff0 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
36000 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
36010 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
36020 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
36030 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
36040 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
36050 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
36060 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
36070 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
36080 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
36090 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
360a0 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
360b0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
360c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
360d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
360e0 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  YPE_VTAB );.  if
360f0 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
36100 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
36110 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
36120 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
36130 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
36140 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
36150 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
36160 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a  ->xNext );..  /*
36170 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78   Invoke the xNex
36180 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  t() method of th
36190 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20  e module. There 
361a0 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68  is no way for th
361b0 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  e.  ** underlyin
361c0 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  g implementation
361d0 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72   to return an er
361e0 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72  ror if one occur
361f0 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e  s during.  ** xN
36200 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20  ext(). Instead, 
36210 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
36220 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75  rs, true is retu
36230 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67  rned (indicating
36240 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61   that .  ** data
36250 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61   is available) a
36260 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  nd the error cod
36270 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  e returned when 
36280 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20  xColumn or.  ** 
36290 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f  some other metho
362a0 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65  d is next invoke
362b0 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69  d on the save vi
362c0 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
362d0 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20  or..  */.  rc = 
362e0 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
362f0 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a  Cur->uc.pVCur);.
36300 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
36310 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
36320 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ab);.  if( rc ) 
36330 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
36340 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d  o_error;.  res =
36350 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
36360 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a  Cur->uc.pVCur);.
36370 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
36380 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28  n(!res,2);.  if(
36390 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20   !res ){.    /* 
363a0 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74 61  If there is data
363b0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  , jump to P2 */.
363c0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
363d0 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
363e0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
363f0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
36400 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23  r_interrupt;.}.#
36410 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
36420 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
36430 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
36440 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36450 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
36460 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
36470 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
36480 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
36490 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
364a0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
364b0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
364c0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
364d0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
364e0 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
364f0 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
36500 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
36510 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
36520 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
36530 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
36540 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
36550 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
36560 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
36570 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
36580 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
36590 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
365a0 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
365b0 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
365c0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
365d0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
365e0 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
365f0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
36600 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74  ame) );.  assert
36610 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
36620 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
36630 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
36640 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
36650 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
36660 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74  EM_Str );.  test
36670 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
36680 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
36690 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
366a0 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
366b0 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73  UTF16BE );.  tes
366c0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
366d0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
366e0 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  E );.  rc = sqli
366f0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
36700 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c  oding(pName, SQL
36710 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
36720 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36730 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36740 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f   rc = pVtab->pMo
36750 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56  dule->xRename(pV
36760 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a  tab, pName->z);.
36770 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
36780 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
36790 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65  ab);.  p->expire
367a0 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20  d = 0;.  if( rc 
367b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
367c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
367d0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
367e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
367f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
36800 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
36810 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
36820 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61  .** Synopsis: da
36830 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a  ta=r[P3@P2].**.*
36840 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
36850 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
36860 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
36870 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
36880 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
36890 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
368a0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
368b0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
368c0 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
368d0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
368e0 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
368f0 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
36900 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
36910 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
36920 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
36930 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
36940 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
36950 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
36960 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
36970 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
36980 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
36990 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
369a0 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
369b0 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
369c0 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
369d0 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
369e0 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
369f0 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
36a00 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
36a10 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
36a20 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
36a30 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
36a40 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
36a50 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
36a60 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
36a70 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
36a80 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
36a90 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
36aa0 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
36ab0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
36ac0 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
36ad0 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
36ae0 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
36af0 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
36b00 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
36b10 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
36b20 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
36b30 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
36b40 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
36b50 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
36b60 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
36b70 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
36b80 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
36b90 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
36ba0 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
36bb0 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
36bc0 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
36bd0 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
36be0 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
36bf0 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
36c00 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
36c10 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
36c20 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
36c30 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
36c40 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
36c50 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a  ust inserted..**
36c60 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65 72  .** P5 is the er
36c70 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f  ror actions (OE_
36c80 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c  Replace, OE_Fail
36c90 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63  , OE_Ignore, etc
36ca0 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e  ) to.** apply in
36cb0 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 63   the case of a c
36cc0 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72  onstraint failur
36cd0 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f  e on an insert o
36ce0 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  r update..*/.cas
36cf0 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a  e OP_VUpdate: {.
36d00 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
36d10 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
36d20 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
36d30 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
36d40 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
36d50 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
36d60 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
36d70 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
36d80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
36d90 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  =1        || pOp
36da0 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20  ->p5==OE_Fail   
36db0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
36dc0 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20  ollback .       
36dd0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41  || pOp->p5==OE_A
36de0 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  bort || pOp->p5=
36df0 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f  =OE_Ignore || pO
36e00 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
36e10 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e.  );.  assert(
36e20 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
36e30 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  );.  pVtab = pOp
36e40 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
36e50 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d  b;.  if( pVtab==
36e60 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62  0 || NEVER(pVtab
36e70 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b  ->pModule==0) ){
36e80 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
36e90 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74  _LOCKED;.    got
36ea0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36eb0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64  rror;.  }.  pMod
36ec0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
36ed0 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70  dule;.  nArg = p
36ee0 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
36ef0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
36f00 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  4_VTAB );.  if( 
36f10 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e  ALWAYS(pModule->
36f20 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20  xUpdate) ){.    
36f30 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
36f40 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f  t = db->vtabOnCo
36f50 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72  nflict;.    apAr
36f60 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
36f70 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70    pX = &aMem[pOp
36f80 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
36f90 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
36fa0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
36fb0 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29  memIsValid(pX) )
36fc0 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
36fd0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b  ToChange(p, pX);
36fe0 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
36ff0 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
37000 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e  ;.    }.    db->
37010 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
37020 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63   pOp->p5;.    rc
37030 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
37040 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
37050 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
37060 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
37070 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e  onflict = vtabOn
37080 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71  Conflict;.    sq
37090 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
370a0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
370b0 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
370c0 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70  ITE_OK && pOp->p
370d0 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  1 ){.      asser
370e0 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
370f0 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
37100 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
37110 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
37120 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
37130 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a  tRowid = rowid;.
37140 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72      }.    if( (r
37150 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
37160 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f  CONSTRAINT && pO
37170 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f  p->p4.pVtab->bCo
37180 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20  nstraint ){.    
37190 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f    if( pOp->p5==O
371a0 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
371b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
371c0 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
371d0 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f  .        p->erro
371e0 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d  rAction = ((pOp-
371f0 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29  >p5==OE_Replace)
37200 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f   ? OE_Abort : pO
37210 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a  p->p5);.      }.
37220 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
37230 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
37240 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 20     }.    if( rc 
37250 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
37260 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
37270 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
37280 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
37290 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
372a0 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
372b0 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
372c0 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
372d0 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
372e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
372f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
37300 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
37310 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
37320 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
37330 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
37340 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
37350 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
37360 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
37370 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
37380 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
37390 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
373a0 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
373b0 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
373c0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
373d0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
373e0 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
373f0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
37400 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
37410 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
37420 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
37430 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
37440 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
37450 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
37460 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
37470 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
37480 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
37490 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
374a0 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
374b0 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
374c0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
374d0 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
374e0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
374f0 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
37500 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
37510 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
37520 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
37530 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
37540 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
37550 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
37560 65 77 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a  ewMax;.  Btree *
37570 70 42 74 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  pBt;..  pOut = o
37580 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
37590 20 70 4f 70 29 3b 0a 20 20 70 42 74 20 3d 20 64   pOp);.  pBt = d
375a0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
375b0 70 42 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20  pBt;.  newMax = 
375c0 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  0;.  if( pOp->p3
375d0 20 29 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d   ){.    newMax =
375e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
375f0 74 50 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20  tPage(pBt);.    
37600 69 66 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e  if( newMax < (un
37610 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29  signed)pOp->p3 )
37620 20 6e 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67   newMax = (unsig
37630 6e 65 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  ned)pOp->p3;.  }
37640 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73  .  pOut->u.i = s
37650 71 6c 69 74 65 33 42 74 72 65 65 4d 61 78 50 61  qlite3BtreeMaxPa
37660 67 65 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77  geCount(pBt, new
37670 4d 61 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Max);.  break;.}
37680 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63  .#endif.../* Opc
37690 6f 64 65 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a  ode: Init * P2 *
376a0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
376b0 73 3a 20 20 53 74 61 72 74 20 61 74 20 50 32 0a  s:  Start at P2.
376c0 2a 2a 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63  **.** Programs c
376d0 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20  ontain a single 
376e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
376f0 20 6f 70 63 6f 64 65 20 61 73 20 74 68 65 20 76   opcode as the v
37700 65 72 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63  ery first.** opc
37710 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72  ode..**.** If tr
37720 61 63 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  acing is enabled
37730 20 28 62 79 20 74 68 65 20 73 71 6c 69 74 65 33   (by the sqlite3
37740 5f 74 72 61 63 65 28 29 29 20 69 6e 74 65 72 66  _trace()) interf
37750 61 63 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ace, then.** the
37760 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f   UTF-8 string co
37770 6e 74 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73  ntained in P4 is
37780 20 65 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20   emitted on the 
37790 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a  trace callback..
377a0 2a 2a 20 4f 72 20 69 66 20 50 34 20 69 73 20 62  ** Or if P4 is b
377b0 6c 61 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74  lank, use the st
377c0 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79  ring returned by
377d0 20 73 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a   sqlite3_sql()..
377e0 2a 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  **.** If P2 is n
377f0 6f 74 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f  ot zero, jump to
37800 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
37810 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74  .*/.case OP_Init
37820 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
37830 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a  jump */.  char *
37840 7a 54 72 61 63 65 3b 0a 20 20 63 68 61 72 20 2a  zTrace;.  char *
37850 7a 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  z;..#ifndef SQLI
37860 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20  TE_OMIT_TRACE.  
37870 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a 20  if( db->xTrace. 
37880 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52 65    && !p->doingRe
37890 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61 63  run.   && (zTrac
378a0 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f  e = (pOp->p4.z ?
378b0 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e   pOp->p4.z : p->
378c0 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20  zSql))!=0.  ){. 
378d0 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56 64     z = sqlite3Vd
378e0 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20 7a  beExpandSql(p, z
378f0 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d 3e  Trace);.    db->
37900 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61 63  xTrace(db->pTrac
37910 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73 71  eArg, z);.    sq
37920 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
37930 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53  z);.  }.#ifdef S
37940 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f  QLITE_USE_FCNTL_
37950 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20 3d  TRACE.  zTrace =
37960 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
37970 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
37980 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63 65  l);.  if( zTrace
37990 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
379a0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
379b0 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
379c0 20 20 20 69 66 28 20 44 62 4d 61 73 6b 54 65 73     if( DbMaskTes
379d0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
379e0 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  i)==0 ) continue
379f0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
37a00 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
37a10 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
37a20 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
37a30 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a  TRACE, zTrace);.
37a40 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
37a50 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46   /* SQLITE_USE_F
37a60 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69  CNTL_TRACE */.#i
37a70 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
37a80 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61  G.  if( (db->fla
37a90 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
37aa0 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28  race)!=0.   && (
37ab0 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
37ac0 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
37ad0 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
37ae0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
37af0 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
37b00 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54  trace: %s\n", zT
37b10 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  race);.  }.#endi
37b20 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
37b30 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  G */.#endif /* S
37b40 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
37b50 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
37b60 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2 ) goto jump_to
37b70 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
37b80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
37b90 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
37ba0 54 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 75  TS./* Opcode: Cu
37bb0 72 73 6f 72 48 69 6e 74 20 50 31 20 2a 20 2a 20  rsorHint P1 * * 
37bc0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 72 6f 76 69  P4 *.**.** Provi
37bd0 64 65 20 61 20 68 69 6e 74 20 74 6f 20 63 75 72  de a hint to cur
37be0 73 6f 72 20 50 31 20 74 68 61 74 20 69 74 20 6f  sor P1 that it o
37bf0 6e 6c 79 20 6e 65 65 64 73 20 74 6f 20 72 65 74  nly needs to ret
37c00 75 72 6e 20 72 6f 77 73 20 74 68 61 74 0a 2a 2a  urn rows that.**
37c10 20 73 61 74 69 73 66 79 20 74 68 65 20 45 78 70   satisfy the Exp
37c20 72 20 69 6e 20 50 34 2e 20 20 54 4b 5f 52 45 47  r in P4.  TK_REG
37c30 49 53 54 45 52 20 74 65 72 6d 73 20 69 6e 20 74  ISTER terms in t
37c40 68 65 20 50 34 20 65 78 70 72 65 73 73 69 6f 6e  he P4 expression
37c50 20 72 65 66 65 72 0a 2a 2a 20 74 6f 20 76 61 6c   refer.** to val
37c60 75 65 73 20 63 75 72 72 65 6e 74 6c 79 20 68 65  ues currently he
37c70 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 73 2e  ld in registers.
37c80 20 20 54 4b 5f 43 4f 4c 55 4d 4e 20 74 65 72 6d    TK_COLUMN term
37c90 73 20 69 6e 20 74 68 65 20 50 34 0a 2a 2a 20 65  s in the P4.** e
37ca0 78 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 20  xpression refer 
37cb0 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  to columns in th
37cc0 65 20 62 2d 74 72 65 65 20 74 6f 20 77 68 69 63  e b-tree to whic
37cd0 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 70  h cursor P1 is p
37ce0 6f 69 6e 74 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65  ointing..*/.case
37cf0 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 3a 20   OP_CursorHint: 
37d00 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
37d10 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
37d20 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
37d30 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
37d40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
37d50 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 45 58 50  ->p4type==P4_EXP
37d60 52 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  R );.  pC = p->a
37d70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
37d80 20 69 66 28 20 70 43 20 29 7b 0a 20 20 20 20 61   if( pC ){.    a
37d90 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
37da0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
37db0 45 45 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  EE );.    sqlite
37dc0 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
37dd0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
37de0 20 42 54 52 45 45 5f 48 49 4e 54 5f 52 41 4e 47   BTREE_HINT_RANG
37df0 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E,.             
37e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f                pO
37e10 70 2d 3e 70 34 2e 70 45 78 70 72 2c 20 61 4d 65  p->p4.pExpr, aMe
37e20 6d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  m);.  }.  break;
37e30 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
37e40 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
37e50 52 5f 48 49 4e 54 53 20 2a 2f 0a 0a 2f 2a 20 4f  R_HINTS */../* O
37e60 70 63 6f 64 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20  pcode: Noop * * 
37e70 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e  * * *.**.** Do n
37e80 6f 74 68 69 6e 67 2e 20 20 54 68 69 73 20 69 6e  othing.  This in
37e90 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 66 74  struction is oft
37ea0 65 6e 20 75 73 65 66 75 6c 20 61 73 20 61 20 6a  en useful as a j
37eb0 75 6d 70 0a 2a 2a 20 64 65 73 74 69 6e 61 74 69  ump.** destinati
37ec0 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65  on..*/./*.** The
37ed0 20 6d 61 67 69 63 20 45 78 70 6c 61 69 6e 20 6f   magic Explain o
37ee0 70 63 6f 64 65 20 61 72 65 20 6f 6e 6c 79 20 69  pcode are only i
37ef0 6e 73 65 72 74 65 64 20 77 68 65 6e 20 65 78 70  nserted when exp
37f00 6c 61 69 6e 3d 3d 32 20 28 77 68 69 63 68 0a 2a  lain==2 (which.*
37f10 2a 20 69 73 20 74 6f 20 73 61 79 20 77 68 65 6e  * is to say when
37f20 20 74 68 65 20 45 58 50 4c 41 49 4e 20 51 55 45   the EXPLAIN QUE
37f30 52 59 20 50 4c 41 4e 20 73 79 6e 74 61 78 20 69  RY PLAN syntax i
37f40 73 20 75 73 65 64 2e 29 0a 2a 2a 20 54 68 69 73  s used.).** This
37f50 20 6f 70 63 6f 64 65 20 72 65 63 6f 72 64 73 20   opcode records 
37f60 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
37f70 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 2e 20   the optimizer. 
37f80 20 49 74 20 69 73 20 74 68 65 0a 2a 2a 20 74 68   It is the.** th
37f90 65 20 73 61 6d 65 20 61 73 20 61 20 6e 6f 2d 6f  e same as a no-o
37fa0 70 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 73  p.  This opcodes
37fb0 6e 65 76 65 72 20 61 70 70 65 61 72 73 20 69 6e  never appears in
37fc0 20 61 20 72 65 61 6c 20 56 4d 20 70 72 6f 67 72   a real VM progr
37fd0 61 6d 2e 0a 2a 2f 0a 64 65 66 61 75 6c 74 3a 20  am..*/.default: 
37fe0 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  {          /* Th
37ff0 69 73 20 69 73 20 72 65 61 6c 6c 79 20 4f 50 5f  is is really OP_
38000 4e 6f 6f 70 20 61 6e 64 20 4f 50 5f 45 78 70 6c  Noop and OP_Expl
38010 61 69 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ain */.  assert(
38020 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
38030 5f 4e 6f 6f 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70  _Noop || pOp->op
38040 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
38050 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
38060 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
38070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
38080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
38090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
380a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a  **************.*
380b0 2a 20 54 68 65 20 63 61 73 65 73 20 6f 66 20 74  * The cases of t
380c0 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
380d0 65 6e 74 20 61 62 6f 76 65 20 74 68 69 73 20 6c  ent above this l
380e0 69 6e 65 20 73 68 6f 75 6c 64 20 61 6c 6c 20 62  ine should all b
380f0 65 20 69 6e 64 65 6e 74 65 64 0a 2a 2a 20 62 79  e indented.** by
38100 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 20   6 spaces.  But 
38110 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 36 20  the left-most 6 
38120 73 70 61 63 65 73 20 68 61 76 65 20 62 65 65 6e  spaces have been
38130 20 72 65 6d 6f 76 65 64 20 74 6f 20 69 6d 70 72   removed to impr
38140 6f 76 65 20 74 68 65 0a 2a 2a 20 72 65 61 64 61  ove the.** reada
38150 62 69 6c 69 74 79 2e 20 20 46 72 6f 6d 20 74 68  bility.  From th
38160 69 73 20 70 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e  is point on down
38170 2c 20 74 68 65 20 6e 6f 72 6d 61 6c 20 69 6e 64  , the normal ind
38180 65 6e 74 61 74 69 6f 6e 20 72 75 6c 65 73 20 61  entation rules a
38190 72 65 0a 2a 2a 20 72 65 73 74 6f 72 65 64 2e 0a  re.** restored..
381a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
381b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
381c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
381d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
381e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20  *************/. 
381f0 20 20 20 7d 0a 0a 23 69 66 64 65 66 20 56 44 42     }..#ifdef VDB
38200 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20 7b 0a  E_PROFILE.    {.
38210 20 20 20 20 20 20 75 36 34 20 65 6e 64 54 69 6d        u64 endTim
38220 65 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  e = sqlite3Hwtim
38230 65 28 29 3b 0a 20 20 20 20 20 20 69 66 28 20 65  e();.      if( e
38240 6e 64 54 69 6d 65 3e 73 74 61 72 74 20 29 20 70  ndTime>start ) p
38250 4f 72 69 67 4f 70 2d 3e 63 79 63 6c 65 73 20 2b  OrigOp->cycles +
38260 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74 61 72  = endTime - star
38270 74 3b 0a 20 20 20 20 20 20 70 4f 72 69 67 4f 70  t;.      pOrigOp
38280 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23  ->cnt++;.    }.#
38290 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68  endif..    /* Th
382a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65  e following code
382b0 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f   adds nothing to
382c0 20 74 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63   the actual func
382d0 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a  tionality.    **
382e0 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   of the program.
382f0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68 65